2016-07-28 49 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