powershell -Command でコマンドを指定してpowershellを起動する場合に複雑な引用符や特殊文字が原因で、うまくコマンドが実行できない場合があります。今回は-EncodedCommand を使用してBase64形式にエンコードされた文字列を実行する方法を記載します。

powershell -Command command コマンドを使用すると、powershell 起動時に command で指定したコマンドを実行できます。command に含まれる文字がエスケープ処理が必要な文字が多いと command に指定する文字列が複雑になります。

そのような場合は、次の紹介するように -EncodedCommand パラメタに Unicode 形式にエンコードしたバイト配列をBase64形式にエンコードして指定できます。

PS C:\> $cmd = '1..10 | %{ $_*$_ }'
PS C:\> $bin = [System.Text.Encoding]::Unicode.GetBytes($cmd)
PS C:\> $enc = [Convert]::ToBase64String($bin)
PS C:\> $enc
MQAuAC4AMQAwACAAfAAgACUAewAgACQAXwAqACQAXwAgAH0A
PS C:\> powershell -EncodedCommand $enc
1
4
9
16
25
36
49
64
81
100

使うことはまれかもしれませんが、仕事で使うことがあったので紹介しました。