PowerShell - バッチファイル内に記述したスクリプトを実行する。
バッチファイル内にPowerShellスクリプトを記述して実行させる方法を知ったのでメモ。
この方法だとExecutionPolicyに関係なく実行できる様なので、普段PowerShellを使用していないPCでも実行可能になる。
参考サイト
記述方法
バッチファイル1行目に以下を記述し、2行目以降にはPowerShellスクリプトを記述する。コマンドライン引数は$argsで取得できる。
@setlocal enableextensions enabledelayedexpansion & set "SELF=%~f0" & PowerShell.exe -Command "& (Invoke-Expression -Command ('{#' + ((Get-Content '!SELF:'=''!') -join \"`n\") + '}'))" %* & exit /b !errorlevel! # 以下実行させたいPowerShellスクリプト
構造
- バッチコマンドを&で連結して1行で記述
- バッチファイルのパスを取得し、ローカルな環境変数SELFに格納
- PowerShell.exe -Command Script %* でスクリプト実行
- exit /bでバッチ終了
PowerShell.exe -Command Scriptの内容
- Get-Contentで環境変数SELF(バッチファイル自身)の内容取得(この際「'」を「''」に置換)
- 取得した内容(行単位の配列)を改行コードで連結してひとつの文字列にする
- 頭に#を追加して、バッチファイル1行目を(PowerShellの)コメントにする
- Invoke-Expressionで実行