[英]Powershell - Running Command on CMD - Wildcards Throw Error
我正在尝试通过 CMD 运行以下 Powershell 命令:
powershell -command "Get-WmiObject Win32_Process | Where-Object {$_.CommandLine -like \"*C:\Windows\Test*\" } | Select-Object ProcessName, CommandLine"
上面的命令直接在 Powershell 上运行良好,但只有在我尝试在 CMD 上运行时才会出现问题。 在我的测试中,我发现 * 符号无法正确处理,我尝试在测试符号前放一个反斜杠,但没有成功。 有没有办法让它与 CMD 中的 * 符号一起使用?
编辑:此命令用于查看包含 C:\\Windows\\Test 命令行的进程
更简单,不需要 PowerShell :
wmic process where "commandline like '%c:\\windows\\test%'" get name, commandline
为了完整起见,为了保持正确的主题,使用 cmd.exe 中的 PowerShell,我会更像这样:
powershell -noprofile "get-ciminstance -query \"select * from win32_process where commandline like '%c:\\windows\\test%'\" | select-object -property processname, commandline"
Compo 有用的wmic
解决方案比调用 Windows PowerShell CLI ( powershell.exe
) 更简单、更高效,但值得注意的是:
wmic.exe
CLI 已被弃用,正如WMIC is deprecated.
所证明的那样WMIC is deprecated.
从 Windows 10 20H2 开始,当您调用其命令行帮助 ( wmic /?
) 时以红色打印; 然而,奇怪的是,文档没有提到弃用。 也就是说, wmic.exe
可能不会消失。
然而,毫无疑问,从 PowerShell内部, CIM cmdlet(例如Get-CimInstance
)更可取, [1]尤其是因为它们返回丰富的对象,而不仅仅是文本。
至于你尝试了什么:
你的命令做的工作从cmd.exe
(,相反,不从PowerShell的,因为里面的PowerShell你需要`"
或""
-不是\\"
-嵌入"
在字符"..."
的字符串)
唯一的问题是执行Get-WmiObject
调用的powershell.exe
进程总是包含在搜索结果中,因为它本身包含搜索词。
因此,唯一需要的调整是使用自动$PID
变量从结果中排除powershell.exe
进程本身,该变量反映了会话自己的进程 ID:
Get-CimInstance
而不是Get-WmiObject
。 请注意添加Where-Object ProcessId -ne $PID
管道段。powershell -c "Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -like \"*C:\Windows\Test*\" } | Where-Object ProcessId -ne $PID | Select-Object ProcessName, CommandLine"
稍微更有效的替代方案是将过滤器在WMI源,使用Get-CimInstance
的-Filter
参数,它接受一个(部分) WQL查询(请注意使用的%
作为通配符,并需要双字面\\
实例;作为副作用,不再需要Where-Object ProcessId -ne $PID
过滤器):
powershell -c "Get-CimInstance Win32_Process -Filter 'CommandLine like \"%C:\\Windows\\Test%\"' | Select-Object ProcessName, CommandLine"
[1] CIM cmdlet(例如Get-CimInstance
)取代了 PowerShell v3(2012 年 9 月发布)中的 WMI cmdlet(例如Get-WmiObject
)。 因此,应该避免使用 WMI cmdlet,尤其是因为 PowerShell (Core) (v6+)(未来所有工作将在其中进行)甚至不再拥有它们。 但是请注意,WMI 仍然是 CIM cmdlet 的基础。 有关更多信息,请参阅此答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.