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
使うことはまれかもしれませんが、仕事で使うことがあったので紹介しました。