次のように、powershell コマンドを powershell.exe に渡すことができます。
PowerShell -Command {Get-EventLog -LogName security}
しかし、コマンドに or が含まれている場合はどうなる{でしょ}うか? そのような:
dir z:\test -fi "*.tmp" -r | ?{$_.creationtime -le (Get-Date).adddays(-30)} | del
ありがとう。
次のように、powershell コマンドを powershell.exe に渡すことができます。
PowerShell -Command {Get-EventLog -LogName security}
しかし、コマンドに or が含まれている場合はどうなる{でしょ}うか? そのような:
dir z:\test -fi "*.tmp" -r | ?{$_.creationtime -le (Get-Date).adddays(-30)} | del
ありがとう。
コマンド パラメーターは、スクリプト ブロックと文字列を受け入れることができます。上の例では、 {} はスクリプト ブロックを示します。そのため、コマンドを {} ではなく "" で囲みます。
PowerShell.exe -Command "dir z:\test -fi "*.tmp" -r | ?{$_.creationtime -le (Get-Date).adddays(-30)} | del"
覚えておくべき唯一のことは、上記のように文字列として指定する場合、 Command は指定する最後の引数でなければならないということです。それ以降はすべて実行したいコマンドとして解釈されるからです。
このような:
PowerShell.exe -Command "dir z:\test -fi "*.tmp" -r | ?{$_.creationtime -le (Get-Date).adddays(-30)} | del"
別の可能性は、コマンドをエンコードすることです:
$command = "dir z:\test -fi '.tmp' -r | ?{$_.creationtime -le (Get-Date).adddays(-30)} | del "
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -encodedCommand $encodedCommand
Invoke-Expressionの使用はオプションになります
PowerShell -Command {Invoke-Expression "dir z:\test -fi `"*.tmp`" -r | ?{`$_.creationtime -le (Get-Date).adddays(-30)} | del"}