2013-03-21 35 views
16

我的情况:ErrorActionPreference和ErrorAction SilentlyContinue为GET-PSSessionConfiguration

$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 - 默默继续;

reference

ErrorAction无处不参数可用于使用参数值SilentlyContinue沉默非终止错误,它可以用于转换使用参数值Stop非终止错误终止错误。然而,它无法帮助您忽略终止错误,在这种情况下,Stop-Transcript会抛出终止错误。如果你想忽略,使用一个try/catch例如为:

try { Stop-Transcript } catch {} 

回答

18

对我一个解决方案:

$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 { 

} 
+4

我不知道'catch'获得异常仍需要'-ErrorAction Stop':| – AceMark 2015-01-29 02:58:28

0

看起来这是一个“未处理的异常”,意思本身并没有被编码的​​识别和处理该异常的小命令。它发生崩溃而无法运行它的内部错误处理,因此cmdlet上的-ErrorAction设置从未发挥作用。

1

Tip #2

不能使用经典2>重定向操作。

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

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

相关问题