はじめに
前提
下記環境での動作を前提としている。
PowerShell 5.1
本記事について
実行ポリシーを変更せずに、PowerShellスクリプトをバッチから実行する方法を示す。
実行する方法
結論から申し上げると、下記方法で、実行ポリシーを変更せずに、バッチからPowerShellスクリプトを実行できる。
- PowerShellスクリプト(.ps1)をワンラインにする。
- PowerShellの起動引数にワンラインにしたPowerShellスクリプトを指定する。
- 保存したバッチを実行する。
PowerShell実行.bat
PowerShell -c "$msg = 'これはテストです。';Write-Host $msg; Get-ChildItem | %% { Write-Host $_.FullName };"
PowerShellの引数する方法
「変換前.ps1」のスクリプトなら、「変換後.bat」に書き換える。
変換前.ps1
$msg = "これはテストです。"
Write-Host $msg
Get-ChildItem | % { Write-Host $_.FullName }
変換後.bat
PowerShell -c "$msg = 'これはテストです。';Write-Host $msg; Get-ChildItem | %% { Write-Host $_.FullName };"
注意事項
「"」を含む場合
「"」(ダブルクォーテーション)は、「'」(シングルクォーテーション)にする。
「%」を含む場合
「%」は、2つにする。
バッチにした際、「%」が1つの場合は「%」が消えてしまう。
(「%」が消える理由は、調査中である。)
おわりに
下記方法でバッチからPowerShellスクリプトを実行する方法を紹介した。
- PowerShellスクリプトをワンラインにする。
- PowerShellの「-c」オプションに、ワンラインにしたPowerShellスクリプトを指定する。
- 保存したバッチを実行する。
※ 本記事は、実行ポリシーの回避を推奨するものではない。