ベンダー アプリケーションの展開スクリプトに取り組んでいます。さまざまな環境の展開パスをマップする xml を読み取り、さまざまなサーバーを反復処理して正しいファイルをコピーし、ロールアウト スクリプトを実行します。ロールアウト スクリプトが失敗した場合、スクリプトを終了させたいです。ロールアウト スクリプトは perl スクリプトであり、その前に .bat を呼び出して一連の環境変数を設定する必要があります。perl スクリプトの実行時に env.bat が設定するシステム変数を引き続き使用できるように、以下に示すように & でつながれたコマンドをすべて発行しました。
$cmdString = $destDrive + ": & call "+$lesDestDir+"data\env.bat & cd "+$rolloutDir+" & perl ..\JDH-rollout-2010.pl "+$rollout+" NC,r:\les"
write-host "cmdString: " $cmdString
Invoke-Command -session $session -ScriptBlock {cmd /v /k `"$args[0]`"} -args $cmdString
変数置換を使用すると、invoke コマンドは次のようになります。
Invoke-Command -session $session -scriptblock {cmd /k "D: & call D:\XXXX\env.bat & cd D:\XXXX\RO-00102 & perl ..\JDH-rollout-2010.pl RO-00102 NC,r:\les"}
問題は、perl スクリプト (cmd のコンテキストで実行されている一連のコマンドの最後のコマンド) からのリターン コードを、スクリプトが実行されているローカル マシンに戻すにはどうすればよいかということです。私はpowershellの経験が限られているため、私のアプローチに対する他の提案は大歓迎です。