WMI-запрос к классу CMI_DataFile выдает «Неверный запрос», если он имеет «где условие1 И условие2» (C #) - PullRequest
1 голос
/ 29 мая 2009

Ладно, вот что я делаю - это только вызовы System.Management:

Простые запросы и метод вызывают работу по одному и тому же соединению. Этот запрос не будет. И файл существует на удаленной машине. Улики?

myQuery = "Select * from CIM_DataFile Where Drive = 'C:' AND Path = '\\Users\\someguy\\Documents\\' AND FileName = 'Default' AND Extension = 'rdp'";

options = new ConnectionOptions();
options.Username = myUsername;
options.Password = myPassword;
options.Authority = "ntlmdomain:MYDOMAIN";
scope = new ManagementScope("\\\\REMOTEMACHINE\\root\\CIMV2", options);
scope.Connect();
searcher = new ManagementObjectSearcher(scope, new ObjectQuery(myQuery));
myResults = searcher.Get();

ManagementObjectSearcher.Get () возвращает мне ManagementException, говорящее «Неверный запрос». Работает более простой запрос, например, «SELECT * FROM Win32_NetworkAdapter».

Я попытался сократить WHERE до одного, то есть "Выбрать * из CIM_DataFile, где Extension = 'rdp'". Это работает, хотя, очевидно, не дает мне то, что я хочу. (До редактирования я ошибочно думал, что даже тогда это не сработало; см. Комментарии) Я нахожусь в конце верёвки здесь.

1 Ответ

3 голосов
/ 10 июня 2009

Я идиот. Пожалуйста, не бейте меня.

Во-первых, запрос работает надежно, только если вы передаете ВСЕ компоненты имени файла в предложениях WHERE.

Во-вторых, мне пришлось удвоить обратную косую черту в компоненте пути, и я делал это неправильно. Я сделал:

pathPath.Replace("\\", "\\\\");

Принимая во внимание, что я должен был сделать:

pathPath = pathPath.Replace("\\", "\\\\");

Это верно. Я работал в предположении, что String.Replace () изменил строку в строке. Плохой C # новичок. Bad.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...