使用PowerShell我得到了Active Directory中所有操作系统的总数。我拥有所有Windows 10操作系统的数量,现在我需要数量超过90天或更早密码的计算机。
我已经使用“ Get-Date”在命令之外尝试了脚本,但是如果可能的话,我需要将其合并到单个命令中。
Get-ADComputer -SearchBase "OU=Computers,DC=DomainName,DC=com" -Filter {OperatingSystem -Like "Windows 10*"} -Property , OperatingSystem, pwdLastSet, |
select OperatingSystem, @{Name="pwdLastSet";Expression={([DateTime]::FromFileTime($_.pwdLastSet))}}
数量:操作系统数量
“超过90天”:?
答案 0 :(得分:3)
属性PwdLastSet
返回AD属性pwdLastSet
的文字值,其中包含编码为filetime的时间戳。您可以自己通过DateTime
将该值解码为[DateTime]::FromFileTime()
值。但是,PowerShell已经为您完成了此操作,并将解码后的值存储在属性PasswordLastSet
中,请改用它。
要获取计算机的密码年龄,您需要计算当前日期与PasswordLastSet
之间的差值,然后获取重新开始的Days
对象的Timespan
属性的值。将其放在计算出的属性中,然后可以筛选密码使用期限大于90天的计算机。
$ou = 'OU=Computers,DC=DomainName,DC=com'
$fltr = 'OperatingSystem -like "Windows 10*"'
$props = 'OperatingSystem', 'PasswordLastSet'
$cutoff = (Get-Date).Date.AddDays(-90)
$hosts = Get-ADComputer -SearchBase $ou -Filter $fltr -Property $props |
Select-Object OperatingSystem,
@{n='PasswordAge';e={((Get-Date) - $_.PasswordLastSet).Days}}
($hosts | Where-Object { $_.PasswordAge -gt 90 }).Count
答案 1 :(得分:1)
如果我们根据您拥有的资源进行构建,则可以执行以下操作:
Get-ADComputer -SearchBase "OU=Computers,DC=DomainName,DC=com" -Filter {OperatingSystem -Like "Windows 10*"} -Property , OperatingSystem, pwdLastSet, | Select-Object OperatingSystem, @{Name="pwdLastSet";Expression={[datetime]::FromFileTime($_.pwdLastSet)}},@{Name="90_Days_Old";Expression={([datetime]::FromFileTime($_.pwdLastSet)).AddDays(90) -le (Get-Date)}}
说明:
如果密码为90天或更早,则Select-Object
计算的属性90_Days_Old
将输出True
。否则,将输出False
。
此处的关键是使用DateTime对象中的.AddDays()
方法。您可以选择在PwdLastSet
(.AddDays(90)
)值中添加90天,或从当前日期和时间(.AddDays(-90)
)中减去90天。
由于以下原因,这不是解决此问题的最佳方法:
PwdLastSet
可能不是最佳属性,因为它以文件时间格式输出。 PasswordLastSet
以易于理解的格式显示日期。