Powershell错误处理:如果未发生错误,请执行某些操作

Powershell错误处理:如果未发生错误,请执行某些操作,powershell,try-catch,Powershell,Try Catch,我一直在找这个,但似乎找不到。 我有一个带有try{}catch{}语句的脚本。如果没有发生错误,我想添加一个操作 乙二醇 如何测试语句中是否没有错误 提前谢谢 Walter清除自动变量后,检查该变量$error $error.clear() try { something } catch { "Error occured" } if (!$error) { "No Error Occured" } 另一种方式: $ErrorOccured = $false try { $Erro

我一直在找这个,但似乎找不到。 我有一个带有try{}catch{}语句的脚本。如果没有发生错误,我想添加一个操作

乙二醇

如何测试语句中是否没有错误

提前谢谢


Walter

清除自动变量后,检查该变量
$error

$error.clear()
try { something }
catch { "Error occured" }
if (!$error) { "No Error Occured" }
另一种方式:

$ErrorOccured = $false

try 
{ 
   $ErrorActionPreference = 'Stop'
   ...something...
}
catch
{
   "Error occured"
   $ErrorOccured=$true
}

if(!$ErrorOccured) {"No Error Occured"}
.

那么

something
If ($?)
{
    "No error"
}
Else
{
    "Error"
}

这也适用于非终止错误。

太好了!谢谢我知道这必须很简单:)我喜欢这个解决方案,但我认为如果可以的话,最好创建一个变量并在相关的
-ErrorVariable
参数中使用它。使用全局错误堆栈并清除它会让人感觉这是一种不好的做法,或者有丢失错误的风险。如果您还想捕获非终止错误,请不要忘记在try块的开头设置
$ErrorActionPreference='Stop'
。顺便说一句,这不会捕获从控制台EXE返回的错误代码。谢谢@KeithHill,我会添加它。另一个选项是将“无错误”代码放在try块中的语句之后:
try{something;“no error”}catch{error}
。如果“某物”因终止错误而失败,执行将跳过“无错误”代码并进入catch块。(当然,“无错误”代码本身可能引发异常,因此这种方法并不总是合适的。)
something
If ($?)
{
    "No error"
}
Else
{
    "Error"
}