我见过至少两个关于WMI的其他问题,但没有人回答我的问题,所以在这里;WQL Like语句和语法
我在我的代码中试验了WMI
接口。基本上这就是我现在的工作。但在我看来,我可以更有效地把它写:
public bool GetUsbStateById(string id) { bool returnValue = false;
try
{
ObjectQuery query = new ObjectQuery();
query.QueryString = string.Format("Select * From Win32_PnPDevice");
ManagementObjectSearcher mySearcher = new ManagementObjectSearcher(query);
List<ManagementObject> results = (from ManagementObject mo in mySearcher.Get().AsParallel()
where mo["SystemElement"].ToString().ToUpper().Contains(id.ToUpper())
select mo).ToList();
if (results.Count > 0)
returnValue = true;
}
catch (Exception ex)
{
// TODO: implement logging
}
return returnValue;
}
所以这里所发生的是,我从ManagementObjectSearcher
的ManagementObjects
列表。这工作正常,并返回确切的结果,因为我期望它的工作。
但对我来说似乎是多余的。因为,首先我得到整个列表,然后过滤它。但是,因为它使用WQL
填充列表,我认为我可以实现这样的事情:
query.QueryString = string.Format("Select * From Win32_PnPDevice where SystemElement Like '%{0}%'",id);
这个不断抛出的exception
查询是不正确的。
所以我想这不是:
query.QueryString = string.Format("Select SystemElement From Win32_PnPDevice);
这工作一样,所以接下来我想Win32_PnPDevice.SystemElement
,但是这也不能工作。
任何的例子我看着在互联网上的表现是这样的
Select * From Win32_Service Where Name Like "%SQL%"
但是C#不能解析环绕%SQL%
声明有双引号,使用的\
转义字符没有结果无论是。
为了测试我的代码和代码下面贴我从微软
显然微软没有像这里讨论的那样为ref类实现类似的运算符http://social.technet.microsoft.com/Forums/nl-BE/winserverpowershell/thread/24981775-e105-42a8-8313-b0b86972f6c3 – wterbeek 2013-02-18 15:15:50