【问题标题】:Try, catch : doing something if the TRY completed successfullyTry, catch : 如果 TRY 成功完成则做某事
【发布时间】:2012-03-28 10:17:07
【问题描述】:

我正在遍历一个 samaccountnames 列表并执行几个操作:

# 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 将输出发送到文件以及控制台。这样我就不必在“tee”输出中使用行了:)

【问题讨论】:

  • 你可以简单地在 try 子句中的所有语句之后直接将变量设置为 true。一个异常会跳过它,因此它不会被设置(或者如果你在退出trycatch 子句时在try 之前设置它,它仍然是假的。然后测试它的值并相应地执行一些操作。跨度>
  • 很棒的提示,但不是我所追求的:) 我对您的回复投了赞成票,因为我相信以后会用到它!

标签: powershell try-catch


【解决方案1】:

可能在这里显示我的无知(我对 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 我就是这样做的。我也不知道 power-shell (还) :)
  • 啊,所以如果发生异常,TRY 会跳转到 CATCH?!当然!效果很好:)
  • 确实如此,这是大多数(所有?)实现 try-catch 子句的语言中的一种行为。
  • 我也不知道try如果发生异常会跳转到catch!很棒的提示!谢谢!
【解决方案2】:

要记住的重要一点:如果由于某种原因禁用用户不起作用,您的 catch 块将不会调用,因为该错误不是终止错误。要将错误类型更改为终止错误,请使用 ErrorAction 参数:

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

【讨论】:

  • 如果你想在 try-catch 子句之后调用一些东西,你可以使用 finally 操作符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 2011-02-17
  • 2012-05-27
  • 2013-06-17
相关资源
最近更新 更多