Я видел по крайней мере два других вопроса, касающихся WMI, но никто не ответил на мой вопрос, так вот он;WQL Как инструкция и синтаксис
Я экспериментировал с интерфейсом 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;
}
Так что здесь происходит то, что я получаю список ManagementObjects
от ManagementObjectSearcher
. Это прекрасно работает и также возвращает точные результаты, поскольку я ожидаю, что он сработает.
Но это кажется излишним для меня. Потому что сначала я получаю весь список, а затем фильтрую его. Но поскольку он использует 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%
заявления там, используя \
маскирующие не дали никаких результатов или.
Чтобы проверить свой код и код размещен ниже я использовал WMI Code Creator от Microsoft
так, очевидно, что Microsoft не реализовать подобный оператор для классов ref, как описано здесь. http://social.technet.microsoft.com/Forums/nl-BE/winserverpowershell/thread/24981775-e105-42a8-8313-b0b86972f6c3 – wterbeek