2012-05-21 32 views
0

我期待產生一個PowerShell腳本,它將返回根中的所有用戶,並標記他們,如果帳戶處於非活動狀態超過15天和/或30天。我認爲我很接近,但我的If/Elseif聲明似乎沒有工作。有誰知道一種方法來改善這一點?修復PowerShell不活動的用戶腳本

$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

看來,您要識別人誰已經從15日登錄到現在爲「待定」,並從30日至15日爲「退休」。

嘗試翻轉您elseif的順序,並將大於或等於支票更改爲小於等於。

您還需要將$ 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" 
} 
+0

感謝塞思,但與我現在的腳本,這只是將所有用戶更改爲待定。我認爲這可能與如何比較$ logon.Value和(get-date).AddDays(-30)有關。 – LinksTune

+0

'$ LLTSlimit =(Get-Date).AddDays(-15).ToFileTimeUTC()。ToString() $ objSearcher.Filter =「(&(objectCategory = person)(objectClass = user)(!(userAccountControl:1.2 .840.113556.1.4.803:= 2))(lastlogontimestamp <= $ LLTSlimit))「' – LinksTune

+0

@LinksTune我很確定這個邏輯是正確的,也許這個條件沒有比較兩個日期類型,例如$ logon .Value是一個字符串。不幸的是,我現在不是我可以測試的地方。 –

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

最後,我找到了我一直在尋找了很長的時間!你幫了我很多。謝謝!