2016-07-28 50 views
0

我正在編寫一個腳本,用於過濾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

'$ DeleteFileTime = $ delete.ToFileTime()'然後'如果($ pc.LastLogonTimeStamp -lt $ DeleteFileTime)' –

回答

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) 
+0

嗯好替代:) thx爲此,並解決我的原始問題;) – user1276012

+0

但與您的方法,我不能訪問lastLogonTime如果我想先保存帳戶的var可以像:$ acc = Search-ADAccount -ComputersOnly -AccountInactive -TimeSpan 90.00:00:00 -SearchBase「OU = Computer,DC = dom,DC = de」-Server dom'。如果我想像'foreach($ pc in $ acc)一樣後來開始一個foreach {$ tmpDate = [datetime] :: FromFileTime($ pc.LastLogonTimeSTamp); if($ tmpDate -lt $ delete){write-host'Delete '$ pc.name'lastLogonDate'$ tmpDate} else {write-host'Disable'$ pc.name'lastLogonDate'$ tmpDate}}',lastLogonDate是01.01.1601 01:00:00。而且我仍然需要使用我的時間變量'$ delete' – user1276012