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