运行 来自 CMD 的 PowerShell 命令给出位置参数错误

Running PowerShell command from CMD gives positional parameter error

我有这个 PowerShell 命令:

Get-WmiObject -Query "Select * from CIM_DataFile Where Extension = 'ost'" |
    Select-Object 'Name' |
    Out-File C:\temp\ost.txt -Append

但我需要 运行 它形成一个命令提示符。我 运行 是这样设置的:

powershell.exe -ExecutionPolicy ByPass -Command "Get-WmiObject -Query "Select * from CIM_DataFile Where Extension = 'ost'" | Select-Object 'Name' | Out-File C:\temp\ost.txt -Append"

我收到这个错误:

Get-WmiObject : A positional parameter cannot be found that accepts argument '*'.
At line:1 char:1
+ Get-WmiObject -Query Select * from CIM_DataFile Where Extension = 'os ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-WmiObject], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.GetWmiObjectCommand

我如何运行正确?

您必须转义 嵌套 " 个字符。在您的命令中,最稳健的做法是 \"" (sic):

PowerShell.exe -c  "Get-WmiObject -Query \""Select * ... 'ost'\"" | Select ..."

注意事项:使用 \""powershell.exe 配合使用效果很好且稳健(对于 PowerShell pwsh Core ),但不适用于 其他 程序,例如 pythonrubyperlnode

请参阅 了解详细说明,包括如何为其他程序转义。