2016-07-28 14 views
0

私はADのコンピュータアカウントをフィルタリングするスクリプトを作成しています。少なくとも90日間以上非アクティブになっているすべてのアカウントを無効/削除します。彼らは、彼らがそう同じ変数内の異なる時刻形式

を削除すべき180日以上の場合は無効、非アクティブの場合する必要があり、少なくとも90日間非アクティブである場合、私は

$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 

その後、私はそれらをdisbaleまたは削除するには、foreachのにそれらを置く

foreach ($pc in $acc) {if($pc.LastLogonTimeSTamp -lt $delete){write-host 'delete'} else {write-host 'disable'}} 

しかし、ここで私は[int64モード] $pc.LastLogonTimeSTampがタイプであることをエラーに遭遇したと18桁の番号であり、 $deleteは時間形式です。しかし、同じ比較をLastLogonTimeSTamp -lt $disable以上にしたのはなぜですか?私はどのようにしてこれを簡単に動かすことができますか?

+0

' $ DeleteFileTime = $ delete.ToFileTime()、次に 'IF($ pc.LastLogonTimeStamp -lt $ DeleteFileTime) ' –

答えて

1

実際にSearch-ADAccountコマンドレットを使用する必要があります。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

Hmm良い代替:)それと私の元の質問を解決するためのthx; – user1276012

+0

しかし、私は最初にvarにアカウントを保存する場合は私はlastLogonTimeにアクセスできません$ acc = Search-ADAccount -ComputersOnly -AccountInactive -TimeSpan 90.00:00:00 -SearchBase "OU = Computer、DC = dom、DC = de" -Server dom'のようになります。 foreachを後で 'foreach($ acc in $ acc){$ tmpDate = [datetime] :: FromFileTime($ pc.LastLogonTimeSTamp); if($ tmpDate -lt $ delete){write-host 'Delete '$ pc.name' lastLogonDate '$ tmpDate} else {write-host' $ pc.name 'を無効にする' lastLogonDate '$ tmpDate}} '、lastLogonDateは01.01.1601 01:00:00です。そして、私はまだ変数 '$ delete'を使用しなければなりません。 – user1276012

関連する問題