我编写了一个 PowerShell 5.1 脚本来导出数据库中的所有用户并将所有数据保存到 CSV 文件中。该脚本允许您设置一个日期,以便您可以决定从何时开始导出用户。
经过一些测试后,我意识到并非所有用户都已导出,经过进一步调查,我发现该属性WhenChanged
并非 WhenCreated
针对每个用户都存在。尽管 AD UI 显示了具有正确数据的属性,如下面的屏幕截图所示。
当我运行以下命令时:
Get-ADUser -filter * -Properties LastLogonDate, userPrincipalName, initials, WhenCreated, whenChanged | Select-Object userPrincipalName, initials, whenCreated, whenChanged
我得到以下结果:
userPrincipalName initials whenCreated whenChanged
----------------- -------- ----------- -----------
11/9/2017 2:06:29 PM 1/24/2018 4:26:48 PM
11/9/2017 2:07:47 PM 11/22/2017 4:12:52 PM
[email protected] MP 11/14/2017 3:14:45 PM 2/14/2018 4:02:51 AM
[email protected] DG 11/15/2017 12:51:25 PM 2/21/2018 2:12:52 PM
[email protected] AE
[email protected] MM
[email protected] RW
[email protected] KK
[email protected] AP
[email protected] JS
[email protected] CB 11/17/2017 12:21:32 PM 11/22/2017 4:41:35 PM
[email protected]
[email protected] TT
如您所见,首字母为 TT 的用户没有任何价值,尽管屏幕截图显示它有价值。尽管我今天创建了这个用户,并在同一天更改了一些值。
问题
- 我错过了什么?
- 这是 AD 本身的问题还是命令的问题?
答案1
解决该问题的方法是右键单击 PowerShell 快捷方式并选择Run as Administrator
。即使您已经是管理员,也必须执行此操作。如果您执行此操作并再次运行该命令,则所有数据都将保留在那里。
userPrincipalName initials whenCreated whenChanged
----------------- -------- ----------- -----------
11/9/2017 2:06:29 PM 1/24/2018 4:26:48 PM
11/9/2017 2:06:29 PM 11/9/2017 2:06:29 PM
11/9/2017 2:06:29 PM 11/9/2017 2:06:29 PM
11/9/2017 2:07:47 PM 11/22/2017 4:12:52 PM
[email protected] MP 11/14/2017 3:14:45 PM 2/14/2018 4:02:51 AM
[email protected] DG 11/15/2017 12:51:25 PM 2/21/2018 2:12:52 PM
[email protected] AE 11/16/2017 1:11:30 PM 11/22/2017 4:11:37 PM
[email protected] MM 11/16/2017 1:12:02 PM 11/22/2017 4:11:37 PM
[email protected] RW 11/16/2017 1:12:40 PM 11/22/2017 4:11:37 PM
[email protected] KK 11/16/2017 1:13:13 PM 11/22/2017 4:11:37 PM
[email protected] AP 11/16/2017 1:14:15 PM 11/22/2017 4:11:37 PM
[email protected] JS 11/16/2017 1:14:50 PM 11/22/2017 4:11:37 PM
[email protected] CB 11/17/2017 12:21:32 PM 11/22/2017 4:41:35 PM
11/22/2017 3:37:49 PM 2/16/2018 2:50:25 PM
11/22/2017 3:38:43 PM 2/17/2018 3:58:24 PM
[email protected] 11/22/2017 4:02:18 PM 11/22/2017 4:41:36 PM
[email protected] TT 2/21/2018 1:21:13 PM 2/21/2018 1:59:17 PM
答案2
像您一样,当我运行此命令时:
Get-ADObject -filter 'sAMAccountName -eq "xxxxxx"' | select whenchanged
日期一直是空的。我找到了这篇文章:https://www.itprotoday.com/powershell/view-all-properties-ad-objects-powershell向我展示了如何列出对象的所有属性:
Get-ADObject -filter 'sAMAccountName -eq "xxxxxx"' -properties *
这使得我对查询进行了这样的修改,以适当地显示 whenChanged (或任何其他属性):
Get-ADObject -filter 'sAMAccountName -eq "xxxxxx"' -properties *| select whenchanged
请注意,您可以用您关心的属性的逗号分隔列表替换“*” - 如果您拥有大型数据集或有限的内存,这可能会对性能产生影响。
希望这对其他人有帮助。