【问题标题】:Fixing Powershell Inactive User Script修复 Powershell 非活动用户脚本
【发布时间】:2012-06-04 17:12:20
【问题描述】:

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

谢谢

【问题讨论】:

    标签: powershell


    【解决方案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))""
    

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

    【讨论】:

      【解决方案2】:

      您似乎将从 -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"
      }
      

      【讨论】:

      • 感谢赛斯,但使用我现在拥有的脚本,这只是将所有用户更改为待处理。我认为这可能与我比较 $logon.Value 和 (get-date).AddDays(-30) 的方式有关。
      • $LLTSlimit = (Get-Date).AddDays(-15).ToFileTimeUTC().ToString() $objSearcher.Filter = "(&amp;(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(lastlogontimestamp&lt;=$LLTSlimit))"
      • @LinksTune 我很确定逻辑是正确的,也许条件不是比较两种日期类型,例如 $logon.Value 是一个字符串。不幸的是,我现在不在可以测试的地方。
      • @LinksTune 我终于能够测试它,我更新了我的答案。您需要使用演员表,就像您已经在 else 块中所做的那样。
      猜你喜欢
      • 2023-01-13
      • 2019-08-13
      • 1970-01-01
      • 2014-11-11
      • 1970-01-01
      • 1970-01-01
      • 2022-06-21
      • 2022-01-04
      • 2018-02-12
      相关资源
      最近更新 更多