0

ルート内のすべてのユーザーを返し、アカウントが15日または30日以上非アクティブである場合にフラグを立てるPowerShellスクリプトを作成しようとしています。私は近いと思いますが、私の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の順序を反転させ、より大きいか等しいチェックをより小さいか等しいに変更してみてください。

「else」ブロックで行っているように、$logon[0] を DateTime にキャストする必要もあります。

したがって、コードは次のようになります。

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 に答える