如果这看起来像重复,我很抱歉。http://serverfault.com/questions/783399/get-a-list-of-users-who-are-domain-admins-and-have-not-logged-in-the-past-30-day
实际上,在我正在阅读有关 AD 的工作原理的文章中已经提出了同样的问题,其中一个练习表明我获得了过去 90 天内未登录的域管理员用户列表。
user360071 建议使用以下脚本:
Import-Module ActiveDirectory
$age = 30
$When = ((Get-Date).AddDays(-$age)).Date
$DomainAdminsDn = (Get-ADGroup 'Domain Admins').DistinguishedName
Get-ADUser -Property LastLogonDate -Filter { ((memberof -eq $DomainAdminsDn) -and (LastLogonDate -lt $When))} | Select SamAccountName,UserPrincipalName,LastLogonDate | Export-CSV $env:USERPROFILE\Desktop\users.csv -NoTypeInformation
或者
Import-Module ActiveDirectory
$age = Read-Host "Accounts that have not been logged into in the last how many days should be shown?"
$When = ((Get-Date).AddDays(-$age)).Date
$DomainAdminsDn = (Get-ADGroup 'Domain Admins').DistinguishedName
Get-ADUser -Property LastLogonDate -Filter { ((memberof -eq $DomainAdminsDn) -and (LastLogonDate -lt $When))} | Select SamAccountName,UserPrincipalName,LastLogonDate | Export-CSV $env:USERPROFILE\Desktop\users.csv -NoTypeInformation
但是,我遇到了与发布此问题的其他用户相同的问题。CSV 文件为空。
我运行了以下代码以确保我的环境中有 DA:
$DomainAdminsDn = (Get-ADGroup 'Domain Admins').DistinguishedName
Get-ADUser -Property LastLogonDate -Filter {(memberof -eq $DomainAdminsDn)}
这些是返回的结果:
DistinguishedName : CN=James Conrad,OU=Sales,OU=London,DC=lab,DC=local
Enabled : True
GivenName : James
LastLogonDate :
Name : James Conrad
ObjectClass : user
ObjectGUID : e990ab92-7034-4be2-8064-ff7a3e31e8b6
SamAccountName : jconrad
SID : S-1-5-21-2556462985-1643875289-4278096718-1118
Surname : Conrad
UserPrincipalName : [email protected]
DistinguishedName : CN=Ed Meadows,OU=Branch Office 1,OU=London,DC=lab,DC=local
Enabled : True
GivenName : Ed
LastLogonDate : 11/06/2016 7:37:21 PM
Name : Ed Meadows
ObjectClass : user
ObjectGUID : 0a70ef30-ffb7-40dd-b0ef-ef94a394e66a
SamAccountName : emeadows
SID : S-1-5-21-2556462985-1643875289-4278096718-1123
Surname : Meadows
UserPrincipalName : [email protected]
如您所见,我至少应该在我的 CSV 文件中获取 James Conrad,因为他从未登录过并且他是域管理员。知道为什么会这样吗?是否因为 James Conrad 从未登录过而 Ed Meadows 不符合标准而为空(-lt -90)
?
当我完成自动化项目或参加自动化培训课程时,总是有人问我为什么不使用
Export-Csv
. 除了将输出保存到文件之外,微软声称与它Export-Csv
相同。ConvertTo-Csv
虽然该陈述在字面上是正确的,但它不能替代经过验证的真实代码:Export-Csv
存在非标准格式对象的问题。这在ActiveDirectory
模块中的 cmdlet 中尤其具有先见之明。这是左手/右手的情况。AD cmdlet 不使用标准格式返回对象,使用它们会遇到类似这样的奇怪问题。在这种情况下,这种久经考验的方法之所以有效,是因为 Powershell 每次都会以相同的方式格式化数据以输出到控制台。关键是重定向运算符
>
,它告诉 Powershell 将控制台输出转储到文件而不是屏幕。