【发布时间】:2021-11-25 01:01:14
【问题描述】:
最近我发现可以像这样向WmiObject 发出 sql 查询:
Get-WmiObject -Query "SELECT * FROM Win32_Process WHERE Name='java.exe'"
我想进一步限制包含 CommandLine 参数的输出,例如:
Get-WmiObject -Query "SELECT * FROM Win32_Process WHERE Name='java.exe' AND CommandLine like '%glassfish%'"
或
Get-WmiObject -Query "SELECT * FROM Win32_Process WHERE Name='java.exe' AND CommandLine like '*glassfish*'"
但是,这不会返回任何答案。我如何在那里制定近似匹配查询?当然可以
Get-WmiObject -Query "SELECT * FROM Win32_Process WHERE Name='java.exe'" | Where-Object { $_.CommandLine -match "glassfish" }
但这看起来并不优雅。
【问题讨论】:
-
CommandLine like '%glassfish%'是正确的语法。您是否验证了第一个命令的输出实际上具有CommandLine值包含glassfish的结果? -
顺便说一句,该语言实际上被称为 WQL(WMI 查询语言),虽然它与 SQL 有非巧合的相似之处,但存在很大差异,尤其是在涉及连接时。 (当该语言被称为 ANSI SQL 的“子集”时,文档完全是谎言,但它肯定不是。)
-
感谢 cmets,是的,我在我的进程中看到了 glassfish(当我在没有类似 '%glassfish%' 的情况下运行时),我用屏幕截图更新了描述
-
该死,我复制粘贴了你的行,它向我展示了一个过程。为什么一开始对我不起作用?
-
嗯,你是对的,它有效。您为什么不从中创建一个答案,然后单击以使其成为答案,然后关闭工单
标签: sql powershell get-wmiobject approximate