繁体   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