バッチファイルから Powershellスクリプトを呼び出した際に、変数などの値をバッチとPowershell相互でやりとりする方法についてです。
コマンドラインから Powershellスクリプトへ値を渡す
コマンドラインから Powershellスクリプトを呼び出す際に、Powershellスクリプトへ値を渡す方法です。
引数で渡す
Powershellスクリプトでは、コマンドラインで指定された引数は $args[0] , $args[1] , … で取得できます。
バッチファイル(test.bat)
powershell -executionpolicy bypass -File test.ps1 value1 value2
Powershellスクリプト(test.ps1)
Write-Host $args[0] Write-Host $args[1]
環境変数経由で渡す
Powershellスクリプトでは、環境変数を $env:環境変数名 で取得できます。
バッチファイル(test.bat)
SET VALUE=12345 powershell -executionpolicy bypass -File test.ps1
Powershellスクリプト(test.ps1)
Write-Host $env:VALUE
Powershellスクリプトからコマンドラインへ値を渡す
コマンドラインから呼び出された Powershellスクリプトが、終了時にコマンドラインへ値を渡す方法です。
単一の数値を渡す場合
この方法で渡せるのは、0~65535の範囲の数値のみです。
また、文字列は渡せません。
Powershellスクリプトで exit で指定した数値が、コマンドラインで %ERRORLEVEL% で取得できます。
Powershellスクリプト(test.ps1)
exit 123
バッチファイル(test.bat)
powershell -executionpolicy bypass -File test.ps1 echo %ERRORLEVEL%
単一の値を渡す場合
この方法では、文字列でも渡せます。
下記例のようにすると、Powershellスクリプトで return で指定した値が、コマンドラインで %VALUE% で取得できます。
VALUE は他の変数名でもOKです。
Powershellスクリプト(test.ps1)
return 'Hello!'
バッチファイル(test.bat)
FOR /F "usebackq" %%i IN (`powershell -executionpolicy bypass -File test.ps1`) DO SET VALUE=%%i echo 値は %VALUE%
なお、%%i の個所は、 batファイル内では %%i と記述しますが、コマンドラインで直接たたく場合は %i と記述します。
複数値をスペース区切りで渡す場合
この方法では、文字列でも渡せます。
下記例では3つの値を返していますが、4つ以上の場合は、バッチファイルでは %%d , %%e , …のようにすると取得できます。
Powershellスクリプト(test.ps1)
$ret="ret1 ret2 ret3" return $ret
バッチファイル(test.bat)
@echo off FOR /F "usebackq tokens=1-10 delims= " %%a IN (`powershell -executionpolicy bypass -File test.ps1`) DO ( SET VALUE1=%%a SET VALUE2=%%b SET VALUE3=%%c ) echo %VALUE1% , %VALUE2% , %VALUE3%
複数値をタブ区切りで渡す場合
この方法では、スペースの入った文字列でも渡せます。
下記例の [タブ]の個所は、タブコード(TABキーで入力)を入れて下さい。
また、下記例では3つの値を返していますが、4つ以上の場合は、バッチファイルでは %%d , %%e , …のようにすると取得できます。
Powershellスクリプト(test.ps1)
$ret="ret 1[タブ]ret 2[タブ]ret 3" return $ret
バッチファイル(test.bat)
@echo off FOR /F "usebackq tokens=1-10 delims=[タブ]" %%a IN (`powershell -executionpolicy bypass -File test.ps1`) DO ( SET VALUE1=%%a SET VALUE2=%%b SET VALUE3=%%c ) echo %VALUE1% , %VALUE2% , %VALUE3%
参考
PowerShellで環境変数を設定する – bakemoji |> log
PowerShell/環境変数の値を取得する方法 – Windowsと暮らす
PowerShellの出力内容をバッチで受け取る – tech.guitarrapc.cóm
.bat(バッチファイル)のforコマンド解説。 – Qiita
意外と知られていないけど、知っていると便利な FOR コマンド – Web/DB プログラミング徹底解説
PowerShellスクリプトに引数を渡す | 株式会社CONFRAGE ITソリューション事業部
コメント