2012-03-28 47 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

相关问题