修复Powershell非活动用户脚本

时间:2012-05-21 20:18:33

标签: powershell

我希望生成一个powershell脚本,该脚本将返回root中的所有用户,并在帐户处于非活动状态超过15天和/或30天时标记它们。我想我很接近,但我的If / Elseif声明似乎没有起作用。有没有人知道改善这个的方法?

$objSearcher.Filter = "(&(objectCategory=person)(objectClass=user))"

$objSearcher.PropertiesToLoad.Add("displayName")
$objSearcher.PropertiesToLoad.Add("sAMAccountName")
$objSearcher.PropertiesToLoad.Add("lastLogonTimeStamp")


$userObjects = $objSearcher.FindAll() 

foreach ($user in $userObjects)
{
 $dn = $user.Properties.Item("displayName")
 $sam = $user.Properties.Item("sAMAccountName")
 $logon = $user.Properties.Item("lastLogonTimeStamp")

 if($logon.Count -eq 0)
 {
    $lastLogon = "Never"
 }
    #Inactive for 15 days
    elseif($logon.Value -ge (get-date).AddDays(-15))
  {
    $lastLogon = "Pending"
 }
    #Inactive for 30 days
      elseif($logon.Value -ge (get-date).AddDays(-30))
     {
        $lastLogon = "Retired"
     }

 else
 {
 $lastLogon = [DateTime]$logon[0]
 $lastLogon = $lastLogon.AddYears(1600)
 }


"""$dn"",$sam,$lastLogon"
}

感谢

2 个答案:

答案 0 :(得分:1)

非常感谢你:

"$LLTSlimit = **(Get-Date).AddDays(-15).ToFileTimeUTC().ToString()** $objSearcher.Filter = "(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556‌​.1.4.803:=2))(lastlogontimestamp<=$LLTSlimit))""

最后,我找了很长时间才找到我想要的东西!你帮助了我很多。谢谢!

答案 1 :(得分:0)

您似乎将从-15天到现在登录的所有人识别为“待定”,并将-30天至-15天登录为“已退休”。

尝试翻转你的elseif的顺序,并将大于或等于的检查更改为小于或等于。

你还需要将$ logon [0]转换为DateTime,就像你在“else”块中一样。

因此,您的代码将变为:

elseif([DateTime]$logon[0] -le (get-date).AddDays(-30))
{
    #Inactive for 30 days
    $lastLogon = "Retired"
}
elseif([DateTime]$logon[0] -le (get-date).AddDays(-15))
{
    #Inactive for 15 days
    $lastLogon = "Pending"
}
相关问题