【发布时间】:2019-04-17 18:03:17
【问题描述】:
我有这个 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:找不到接受参数“*”的位置参数。 在行:1 字符:1 + Get-WmiObject -Query Select * from CIM_DataFile Where Extension = 'os ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Get-WmiObject], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.GetWmiObjectCommand如何正确运行?
【问题讨论】:
-
对
-Query参数使用单引号,并使用^转义双引号。 -
用反斜杠转义嵌套的双引号:
"Get-WmiObject -Query \"Select * from ...\" | ..." -
@AnsgarWiechers 为什么是
\?我以为cmd转义是^ -
别问我为什么。我只能告诉你
^是 CMD most 中的转义字符。 ;) -
@TheIncorrigible1: PowerShell 需要
\-转义"字符。 在处理 CLI 参数时。cmd.exe忽略了\本身,尽管它将以下"视为语法元素然后带来了自己的挑战。
标签: powershell cmd escaping quoting