1

您可以将 powershell 命令传递给 powershell.exe,如下所示:

PowerShell -Command {Get-EventLog -LogName security}

但是如果命令包含{or}怎么办?如:

dir z:\test -fi "*.tmp" -r | ?{$_.creationtime -le (Get-Date).adddays(-30)} | del

谢谢。

4

4 回答 4

2

command 参数可以接受脚本块以及字符串,在您的顶部示例中 {} 表示脚本块。因此,只需将您的命令括在“”而不是 {} 中。

PowerShell.exe -Command "dir z:\test -fi "*.tmp" -r | ?{$_.creationtime -le (Get-Date).adddays(-30)} | del"

唯一要记住的是,如果您将其指定为上述字符串,则 Command 必须是您指定的最后一个参数,因为它之后的所有内容都被解释为您要运行的命令。

于 2013-02-17T13:59:02.760 回答
1

另一种可能性是对您的命令进行编码:

$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
于 2013-02-17T10:28:52.893 回答
1

像这样:

PowerShell.exe -Command "dir z:\test -fi "*.tmp" -r | ?{$_.creationtime -le (Get-Date).adddays(-30)} | del"
于 2013-02-17T07:39:23.670 回答
0

使用 Invoke-Expression 可以是一个选项

PowerShell -Command {Invoke-Expression "dir z:\test -fi `"*.tmp`" -r | ?{`$_.creationtime -le (Get-Date).adddays(-30)} | del"} 
于 2013-02-17T10:21:13.260 回答