0

我正在寻找一个 powershell 脚本,该脚本将返回根目录中的所有用户,并在帐户处于非活动状态超过 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"
}

谢谢

4

2 回答 2

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))""

终于,我找到了我一直在寻找的东西!你帮了我很多。谢谢!

于 2012-06-04T08:58:31.023 回答
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"
}
于 2012-05-21T20:23:47.927 回答