问题

问题

我编写了一个 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

请注意,您可以用您关心的属性的逗号分隔列表替换“*” - 如果您拥有大型数据集或有限的内存,这可能会对性能产生影响。

希望这对其他人有帮助。

相关内容