Batファイル内にPowerShellのスクリプトを記述する
概要
通常、BatファイルからPowerShellのスクリプトを実行するには、別途ps1ファイルが必要となる。ちょっとしたスクリプトだとわざわざ別ファイルを用意するのは煩わしい。
Batファイル内部にPoweShellのスクリプトを記述し、実行する方法を記述する。
目次
記述内容
以下のように記述することで、BatファイルからPoweShellを起動できる。なお、実行されるスクリプトは"# PowerShellのスクリプト"以降の行となっている。
@powershell -NoProfile -ExecutionPolicy Unrestricted "$s=[scriptblock]::create((Get-Content \"%~f0\"|?{$_.readcount -gt 2})-join\"`n\"); &$s" %* exit # PowerShellのスクリプト Write-Host "Hello, World!!"
解説
@powershell (省略)
PowerShellの実行コマンド。
-NoProfile
プロファイルを読み込まない。
-ExecutionPolicy
実行ポリシーをUnrestricted
に設定する。
"$s=(省略)&$s"
PowerShellで実行させるコマンド。
$s
変数。[scriptblock]::create
で作成したスクリプトを格納している。
[scriptblock]::create((省略));
(省略)部分の文字列からPowerShellのスクリプトを生成する。
Get-Content \"%~f0\"
\"%~f0\
の内容を読み込む。
\"%~f0\
実行中のバッチファイル自身のパス。
|
パイプライン。
-gt 2
2
より大きい。ここでは2行目以降となる。
-join
前述の文字配列を後述の文字で連結する。ここでは、バッチファイルの各行を改行コードで連結している。
$s
変数$2を実行する。
%*
バッチファイル実行時に与えられた引数。ここでは、引数全てをPowerShellに渡している。
exit
バッチ処理は終了。
# PowerShellのスクリプト
これ以降がPowerShellのスクリプトになっている。
以上。