WQL like运算符不适用于REF属性

时间:2012-09-03 12:29:32

标签: c# wmi wql

gwmi -Query“SELECT * FROM Win32_Service WHERE Name LIKE'%Logon%'”(工作正常)

返回一些结果集,但当我在其他类REF属性ex:Win32_DependentService上对Antecedent属性运行类似查询时,查询无效。

gwmi -Query“select * from Win32_DependentService,其中Antecedent就像'%'”(不起作用)(例如,我的意图是不显示Win32_DependentService中的所有条目,以及我有一个适当的条款。)

上面的一个告诉查询告诉无效。

来自MSDN的

Win32_DependentService

class Win32_DependentService : CIM_ServiceServiceDependency
{
  Win32_BaseService REF Antecedent;
  Win32_BaseService REF Dependent;
  uint16            TypeOfDependency;
};

gwmi -Query“select * from Win32_DependentService,其中Antecedent ='\\\\ XXXXXXX-machine \\ root \\ cimv2:Win32_SystemDriver.Name =`”ibbus`“'”这给了正确的结果

为什么会这样?是因为先行财产是REF吗?

请尽可能使用适当的示例告诉我行为,以及在这种情况下如何使用'like'。

3 个答案:

答案 0 :(得分:3)

如果您想要返回此属性具有值的所有记录(即非空白),您只需要使用“NOT Antecedent.Name IS NULL”。

答案 1 :(得分:0)

我并不是很熟悉你想要做的事情,所以请原谅我,如果这完全不合适,但首先想到的是Windows服务的名称是一个简单的字符串,而前面的是一个class,因此当您在更具体的where子句中显示时,您必须提供某种路径来使查询起作用,简而言之,通配符只适用于字符串。

你有没有试过像

这样的东西
gwmi -Query "select * from Win32_DependentService where Antecedent.Name like '%'"

不确定这是否会处理没有前因或id的服务,它甚至是有效的语法。

答案 2 :(得分:0)

LIKE运算符确定字符串(非空但至少包含1个或多个字符)是否与模式匹配。因此声明 - WHERE值 LIKE '%' - 没有意义,因为该值无法检查。请参阅WQL LIKE运算符: http://msdn.microsoft.com/en-us/library/windows/desktop/aa392263(v=vs.85).aspx