hakeの日記

Windows環境でプログラミングの勉強をしています。

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で実行