ps1ファイルでコマンドを実行する様々な方法
普通にコマンド名を書いて、引数を並べるだけでもコマンド扱いになる
code:ps1
notepad ./foo.txt
文字列をコマンドとして実行するのであれば、頭に&をつける code:ps1
&"C:\WINDOWS\system32\notepad.exe" ./foo.txt
文字列の中にコマンドを書く際は、$()で囲む
code:ps1
"$(C:\WINDOWS\system32\notepad.exe ./foo.txt)"
code:ps1
$command = "notepad ./foo.txt"
Invoke-Expression $command
code:ps1
$arg = "./foo.txt"
notepad $arg
code:ps1
$arg = @("-Pattern", 2)
echo 1,2,3 | Select-String $arg
ただし、万能ではないようで、配列を含んだ配列を引数にそのまま渡すことはできない模様
code:ps1
$arg = @("-Pattern", 2, "-Context", @(1,1))
echo 1,2,3 | Select-String $arg
Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Pattern'. Specified method is not supported.