我正在编写一个过滤AD中计算机帐户的脚本。我想禁用/删除至少处于非活动状态超过90天的所有帐户。如果它们至少在90天内处于非活动状态,则应禁用它们,如果处于非活动状态超过180天,则应将其删除
所以,我得到了禁用和删除的日期
$disbale= (Get-Date).AddDays(-90)
$delete = (Get-Date).AddDays(-180)
现在我遍历给定的OU并获取至少90天无效的所有帐户,因此我也会获得超过180天无效的帐户。
$acc = Get-ADcomputer -Filter {LastLogonTimeSTamp -lt $disable)} -Properties LastLogonTimeStamp,Description -SearchBase "OU=Computer,DC=dom,DC=de" -Server dom
然后我会将它们放入foreach中以取消或删除它们
foreach ($pc in $acc) {if($pc.LastLogonTimeSTamp -lt $delete){write-host 'delete'} else {write-host 'disable'}}
但是在这里我遇到了$pc.LastLogonTimeSTamp
类型为[int64]的错误,并且是18位数字,$delete
是格式时间。但是为什么LastLogonTimeSTamp -lt $disable
以上的相同比较起作用呢?现在它起作用了吗?我怎么能这么容易地工作?
答案 0 :(得分:1)
您应该使用Search-ADAccount cmdlet,它位于Get-ADComputer所在的同一个Active Directory模块中。
Search-ADAccount -ComputersOnly -AccountInactive -TimeSpan 90.00:00:00 | where {$_.enabled} | Disable-ADAccount
Search-ADAccount -ComputersOnly -AccountInactive -TimeSpan 180.00:00:00 | where {$_.enabled} | Remove-ADComputer
至于你的确切脚本,你应该改为:
if($pc.LastLogonTimeSTamp -lt $delete)
要:
if([datetime]::FromFileTime($pc.LastLogonTimeSTamp) -lt $delete)