我見過至少兩個關於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