2012-03-28 49 views
1

完成我通過循環的samaccountnames名單和執行幾個動作:嘗試,美中不足的是:做什麼,如果TRY成功

# Disabling user 
try {  
    Disable-QADUser $user | Out-Null 
} catch [exception] { 
    "Disable-QADuser: " + $($_.Exception.Message) | out-file $logfile -append 
    write-host " - Error disabling useraccount." -fore yellow 
} 

# Set informative description 
try {  
    Set-QADuser $user -Description "Disabled $now" | Out-Null 
} catch [exception] { 
    "Set-QADuser: " + $($_.Exception.Message)| out-file $logfile -append 
    write-host " - Error setting informative description in AD." -fore yellow 
} 

但我怎麼輸出的東西,如果命令成功完成?類似於

write-host "User $user disabled" 
"User $user disabled" | out-file $logfile -append 

非常感謝所有幫助/指示!

編輯 我注意到,我可以使用tee-object發送輸出到文件以及控制檯..這樣我就不必有行「三通」輸出:)

+2

那麼您可以直接在try子句中的所有語句之後將變量設置爲true。一個例外會跳過,因此它不會被設置(或者,如果您在退出try和catch語句時將'try'設置爲'try',那麼它將保持爲false,然後測試它的值並相應地執行一些操作。 – deed02392 2012-03-28 10:21:25

+0

太棒了提示,但不是我以後:)我投你的迴應,因爲我相信我會在稍後使用它! – Sune 2012-03-28 10:59:19

回答

5

可能在這裏表現出我的無知(我對power-shell一無所知,抱歉 - 不要投我票!)。但如果是像java什麼,你只是把它放在您要執行的下面那條線:

try {  
    Set-QADuser $user -Description "Disabled $now" | Out-Null 
    write-host "User $user disabled" 
    "User $user disabled" | out-file $logfile -append 
} catch [exception] { 
    "Set-QADuser: " + $($_.Exception.Message)| out-file $logfile -append 
    write-host " - Error setting informative description in AD." -fore yellow 
} 
+1

+1我就是這麼做的。我不知道電源外殼(還):) – surfen 2012-03-28 10:37:12

+0

啊,所以如果發生異常TRY跳轉到CATCH ?!當然!很棒的作品:) – Sune 2012-03-28 10:53:12

+0

它的確如此,這是大多數(所有?)語言實現try-catch子句的行爲。 – deed02392 2012-03-29 17:15:43

1

一個重要的事情要記住:如果由於某種原因禁用用戶沒有工作,你的catch塊不會調用,因爲錯誤不是終止錯誤。要將錯誤類型更改爲終止錯誤,請使用ErrorAction參數:

Set-QADuser $user -Description "Disabled $now" -ErrorAction Stop | ... 
+0

好點!謝謝! – Sune 2012-03-28 12:42:33

+0

如果你想在try-catch子句後調用某些東西,你可以使用'finally'運算符。 – deed02392 2012-03-29 17:16:11

相關問題