簡體   English   中英

使用Try Catch塊的PowerShell錯誤處理導致錯誤的結果

[英]PowerShell Error handling using Try Catch block resulting wrong result

我有兩個服務,其中一個服務名稱錯誤(Spooler1)。 當我運行Invoke命令以使用try catch塊停止服務時,將導致錯誤消息。

例:

[array]$Services = "spooler1","spooler"
$ComputerName = 'localhost'
For ($i=0; $i -lt $Services.Count; $i++)
{
    Try
        {
            #Stop service
            Invoke-Command -ComputerName $ComputerName -ScriptBlock {param($Service) Stop-Service $Service} -ArgumentList $Services[$i]
            Write-Host "Try Block"
        }
    Catch
        {
            Write-Host "Catch Block"

        }
}

結果:

Cannot find any service with service name 'spooler1'.
+ CategoryInfo          : ObjectNotFound: (spooler1:String) [Stop-Service], ServiceCommandException
+ FullyQualifiedErrorId : NoServiceFoundForGivenName,Microsoft.PowerShell.Commands.StopServiceCommand
+ PSComputerName        : localhost

Try Block
Try Block

當我在Powershell Script上運行時,這兩個服務均出現消息“嘗試阻止”。

但是結果應該是

Catch Block
Try Block

我們是否有任何解決方法來解決此問題。

在Invoke-command語句的末尾添加ErrorAction stop之后,它可以正確處理錯誤。

..
Invoke-Command -ComputerName $ComputerName -ScriptBlock {param($Service) Stop-Service $Service} -ArgumentList $Services[$i] -ErrorAction Stop

結果:

Catch Block
Try Block

Invoke-Command返回一個非終止錯誤時,它無法找到的第一個服務,它觸發catch{}塊。

如您所發現,通過顯式指定-ErrorAction Stop-ErrorAction Stop cmdlet中的錯誤視為終止錯誤,從而觸發catch{}

https://blogs.technet.microsoft.com/heyscriptingguy/2015/09/16/understanding-non-terminating-errors-in-powershell/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM