windows Powershell -在CMD上运行命令-通配符抛出错误

lg40wkob  于 2023-11-21  发布在  Windows
关注(0)|答案(2)|浏览(145)

我正在尝试通过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命令行的进程

mkshixfv

mkshixfv1#

更简单的是,* 不需要PowerShell*:

wmic process where "commandline like '%c:\\windows\\test%'" get name, commandline

字符串
为了完整起见,为了正确地保持主题,使用PowerShell从Roll.exe,我会这样做:

powershell -noprofile "get-ciminstance -query \"select * from win32_process where commandline like '%c:\\windows\\test%'\" | select-object -property processname, commandline"

7lrncoxx

7lrncoxx2#

Compo's helpful wmic solution比调用Windows PowerShell CLI(powershell.exe)更简单、更高效,但值得注意的是:

***wmic.exe CLI * 已被弃用 *,从Windows 10 20 H2调用其命令行帮助(wmic /?)时,WMIC is deprecated.以红色打印也可以证明这一点。也就是说,wmic.exe可能不会消失。

  • 然而,毫无疑问,从 * PowerShell内部**,CIM小工具(例如,Get-CimInstance)是更好的,[1]不仅仅是因为它们返回丰富的 * 对象 * 而不仅仅是 * 文本 *。

至于你尝试了

*您的命令 does work from cmd.exe(相反,does not from PowerShell,因为在PowerShell中,您需要``"""-而不是"-将"字符嵌入"..."`字符串)

  • 唯一的问题是执行Get-WmiObject调用的powershell.exe进程 * 总是包含在搜索结果中 *,因为它本身包含搜索项。

因此,**唯一需要的调整是 * 从结果中排除powershell.exe进程本身 *,使用自动$PID变量,它反映了会话自己的进程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"

字符串
一个稍微更有效的替代方法是在Get-CimInstance-Filter参数中 *filter在\的源代码中 *,该参数接受WQL查询的(部分)(注意%作为\字符的使用,以及需要 double literal \示例;作为副作用,Where-Object ProcessId -ne $PID过滤器不再需要):

powershell -c "Get-CimInstance Win32_Process -Filter 'CommandLine like \"%C:\\Windows\\Test%\"' | Select-Object ProcessName, CommandLine"


[1]CIM小插件(例如,Get-CimInstance)取代了小程序(例如,Get-WmiObject)在PowerShell v3中(2012年9月发布)。因此,应该避免使用CIM小工具,尤其是因为PowerShell(Core)(v6+),未来所有的工作都将在那里进行,甚至不再有它们。请注意,CIM小工具仍然是CIM小工具的基础,有关详细信息,请参阅this answer

相关问题