他のPowershellスクリプトを実行するという戻り値を持つpowershellスクリプト(.ps1)があります。
このコマンドでスクリプトを呼び出します:
$result = Invoke-Expression -Command ".\check.ps1 $fileCommon"
Write-Output $result
出力は、他のスクリプトを持つWrite-Ouput
のみであり、$true
または$false
である戻り値はありません。
他のスクリプトからの戻りをキャッチするにはどうすればよいですか?
PowerShellのreturn
ステートメントの背後にある式は、他のすべての式と同様に評価されます。出力を生成する場合、stdoutに書き込まれます。 $ resultは、スクリプトによってstdoutに書き込まれたものを受け取ります。複数のものがstdoutに書き込まれている場合、これらのものを配列で取得します。
たとえば、check.ps1が次のようになっている場合:
Write-Output "$args[0]"
return $false
そしてあなたはそれを呼び出す
$result = &".\check.ps1" xxx
$result
は、値が「xxx」(文字列)および「False」(ブール)のサイズ2のオブジェクト配列になります。
戻り値のみをstdoutに書き込むようにスクリプトを変更できない場合(これが最もクリーンな方法です)、最後の値以外はすべて無視できます。
$result = &".\check.ps1" xxx | select -Last 1
今$result
には、ブール値として「False」のみが含まれます。
スクリプトを変更できる場合、別のオプションは変数名を渡し、スクリプトでそれを設定することです。
コール:
&".\check.ps1" $fileCommon "result"
if ($result) {
# Do things
}
スクリプト:
param($file,$parentvariable)
# Do things
Set-Variable -Name $parentvariable -Value $false -Scope 1
-Scope 1
は親(呼び出し元)スコープを参照するため、呼び出し元のコードから読み取ることができます。