GetA PSSessionConfiguration的ErrorActionPreference和ErrorAction SilentlyContinue

时间:2013-03-21 10:51:38

标签: powershell error-handling silent

我的情况:

$ErrorActionPreference = "Stop";
"1 - $ErrorActionPreference;"
Get-ChildItem NoSuchFile.txt -ErrorAction SilentlyContinue;
"2 - $ErrorActionPreference;"
Get-ChildItem NoSuchFile.txt -ErrorAction Stop;
"3 - $ErrorActionPreference;"

输出:

  

1 - 停止;
  2 - 停止;
  并显示错误......

现在,

$ErrorActionPreference = "Stop";
"1 - $ErrorActionPreference;"
(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue)
"2 - $ErrorActionPreference;"

输出:

  

1 - 停止;
  并显示错误......

为什么不能为Get-PSSessionConfiguration工作-ErrorAction SilentlyContinue?

更新

现在,

$ErrorActionPreference = "Continue"
"1 - $ErrorActionPreference;"
(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue)
"2 - $ErrorActionPreference;"

输出:

  

1 - 继续;
  2 - 继续;

现在,

$ErrorActionPreference = "SilentlyContinue"
"1 - $ErrorActionPreference;"
(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue)
"2 - $ErrorActionPreference;"

输出:

  

1 - SilentlyContinue;
  2 - SilentlyContinue;

reference

ErrorAction普遍存在的参数可用于使用参数值SilentlyContinue来消除非终止错误,并且可以使用参数值{{1来将非终止错误转换为终止错误}}。但它无法帮助您忽略终止错误,在这种情况下,Stop-Transcript会引发终止错误。如果你想忽略,请使用try / catch例如:

Stop

3 个答案:

答案 0 :(得分:22)

我的解决方案:

$old_ErrorActionPreference = $ErrorActionPreference
$ErrorActionPreference = 'SilentlyContinue'
if((Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue) -eq $null) {
   WriteTraceForTrans "The session configuration MyShellUri is already unregistered."
}
else {        
   #Unregister-PSSessionConfiguration -Name "MyShellUri" -Force -ErrorAction Ignore
}
$ErrorActionPreference = $old_ErrorActionPreference 

或使用try-catch

try { 

(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue)

} 
catch {

}

答案 1 :(得分:1)

看起来这是一个“未处理的异常”,这意味着cmdlet本身尚未编码以识别和处理该异常。它在没有运行它的内部错误处理的情况下爆炸,因此cmdlet上的-ErrorAction设置永远不会发挥作用。

答案 2 :(得分:1)

Tip #2

您不能使用经典的2>重定向运算符。

(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue) 2> $NULL
if(!$?){
   'foo'
}

我不喜欢错误,所以我不惜一切代价避免错误。