2013-03-21 22 views
16

trường hợp của tôi:ErrorActionPreference và ErrorAction SilentlyContinue cho Get-PSSessionConfiguration

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

Output:

1 - Stop;
2 - Dừng;
và hiển thị một lỗi ...

Bây giờ,

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

Output:

1 - Stop;
và hiển thị một lỗi ...

Tại sao không làm việc -ErrorAction SilentlyContinue) cho Get-PSSessionConfiguration?

Cập nhật:

Bây giờ,

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

Output:

1 - Tiếp tục;
2 - Tiếp tục;

Bây giờ,

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

Output:

1 - SilentlyContinue;
2 - SilentlyContinue;

này reference:

Tham số phổ biến ErrorAction thể được sử dụng để bịt miệng lỗi không chấm dứt sử dụng tham số giá trị SilentlyContinue và nó có thể được sử dụng để chuyển đổi không chấm dứt lỗi lỗi chấm dứt sử dụng tham số giá trị Stop . Tuy nhiên nó không thể giúp bạn bỏ qua lỗi chấm dứt và trong trường hợp này Stop-Transcript là ném một lỗi chấm dứt. Nếu bạn muốn bỏ qua, hãy dùng try/catch ví dụ .:

try { Stop-Transcript } catch {} 

Trả lời

18

Một giải pháp cho tôi:

$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 

Hoặc sử dụng try-catch

try { 

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

} 
catch { 

} 
+4

Tôi không biết '-ErrorAction Stop' vẫn còn cần thiết để' bắt' nhận ngoại lệ: | – AceMark

0

Dường như đó là một "ngoại lệ unhandled", có nghĩa là lệnh bản thân chưa được mã hoá để nhận biết và xử lý ngoại lệ đó. Nó đã thổi lên mà không bao giờ chạy để xử lý lỗi nội bộ của nó, vì vậy thiết lập -ErrorAction trên cmdlet không bao giờ được phát.

1

Tip #2

bạn không thể sử dụng toán tử 2> chuyển hướng cổ điển.

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

Tôi không thích lỗi vì vậy tôi tránh chúng bằng mọi giá.

Các vấn đề liên quan