19

PowerShell を使用してリモート マシンにサービスをインストールしようとしています。

これまでのところ、次のものがあります。

Invoke-Command -ComputerName  $remoteComputerName -ScriptBlock {
         param($password=$password,$username=$username) 
         $secpasswd = ConvertTo-SecureString $password -AsPlainText -Force
         $credentials = New-Object System.Management.Automation.PSCredential ($username, $secpasswd)
         New-Service -Name "XXX" -BinaryPathName "c:\XXX.exe" -DisplayName "XXX XXX XXX" -Description "XXXXXX." -Credential $credentials -ErrorVariable errortext 
         Write-Host("Error in: " + $errortext)
        } -ArgumentList $password,$username -ErrorVariable errortext 


Write-Host("Error out: " + $errortext)

New-Service の実行中にエラーが発生すると、$errortext ErrorVariable が ScriptBlock 内で適切に設定されます。

Invoke-Command の ErrorVariable が設定されません (これは予想どおりです)。

私の質問は:

Invoke-Command の ErrorVariable を、ScriptBlock 内で発生したエラーに設定することは何とか可能ですか?

InstalUtil、WMI、および SC を使用してサービスをインストールすることもできますが、現時点では関係ありません。

4

4 に答える 4

23

Errorvariableいいえ、呼び出しからInvoke-Commandスクリプトブロックと同じように設定することはできません。

しかし、あなたの目標が「スクリプトブロックのエラーを検出して処理し、呼び出し元のコンテキストに返されるエラーを取得するInvoke-Command」ことである場合は、手動で実行してください。

$results = Invoke-Command -ComputerName server.contoso.com -ScriptBlock {
   try
   {
       New-Service -ErrorAction 1
   }
   catch
   {
       <log to file, do cleanup, etc>
       return $_
   }
   <do stuff that should only execute when there are no failures>
}

$resultsエラー情報が含まれるようになりました。

于 2012-09-26T20:01:01.143 に答える