2016-10-28 5 views
1

サービス名の1つが間違っています(Spooler1)。 try catchブロックを使用してサービスを停止するためにInvoke-commandを実行すると、間違ったメッセージが表示されます。PowerShell 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のスクリプト上で実行します。

Catch Block 
Try Block 

しかし、結果がでなければなりませんが、我々はこの問題を修正するために任意の回避策はありますか。

+0

これを参照してください。http://stackoverflow.com/questions/12600921/handle-errors-in-scriptblock-in-invoke-command-cmdlet –

答えて

1

Invoke-commandステートメントの最後にErrorAction stopを追加すると、エラーが正しく処理されます。

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

結果:それはcatch{}ブロックをトリガしない最初のサービスを、見つけることができないとき

Catch Block 
Try Block 
関連する問題