Get-WmiObject:找不到接受参数的位置参数

时间:2017-07-17 21:56:43

标签: powershell cmd

我创建了以下PowerShell脚本来终止进程:

$oProcs = Get-WmiObject Win32_Process -filter "commandline like '%G:\\TCAFiles\\Users\\Admin\\2155\\Unturned.exe%'";foreach ($oProc in $oProcs){Stop-Process $oProc.Handle}

上面的脚本运行正常,但是当我尝试从命令提示符启动脚本时,它会失败。

powershell -Mta -NoProfile -Command "$oProcs = Get-WmiObject Win32_Process -filter "commandline like '%G:\TCAFiles\Users\Admin\2155\Unturned.exe%'";foreach ($oProc in $oProcs){Stop-Process $oProc.Handle}"

这会导致以下错误:

Get-WmiObject : A positional parameter cannot be found that accepts argument
'%G:\TCAFiles\Users\Admin\2155\Unturned.ex e%'.
At line:1 char:11
+ $oProcs = Get-WmiObject Win32_Process -filter commandline like '%G:\T ...
+           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-WmiObject], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.GetWmiObjectCommand

我不确定此错误的含义或解决方法。

1 个答案:

答案 0 :(得分:1)

您将需要转义作为参数传递的powershell代码中的任何双引号。目前,您的命令参数将在“-filter”之后结束。

如果从cmd运行此命令,则可以使用反斜杠转义双引号:

powershell -Mta -NoProfile -Command "$oProcs = Get-WmiObject Win32_Process -filter \"commandline like '%G:\TCAFiles\Users\Admin\2155\Unturned.exe%'\";foreach ($oProc in $oProcs){Stop-Process $oProc.Handle}"

或者如果你在powershell中运行它,你可以通过在反引号或其他双引号前加上它来逃避它们:

powershell -Mta -NoProfile -Command "$oProcs = Get-WmiObject Win32_Process -filter ""commandline like '%G:\TCAFiles\Users\Admin\2155\Unturned.exe%'"";foreach ($oProc in $oProcs){Stop-Process $oProc.Handle}"