我希望生成一个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"
}
感谢
答案 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"
}