Почему WMI не возвращает полный набор результатов в ManagementObjectCollection? - PullRequest
1 голос
/ 21 июня 2011

Выполнение запроса WMI с использованием C # .net

Любые идеи о том, почему это не всегда возвращает одинаковые события во временном диапазоне, когда запрос выполняется несколько раз, а также не вызывает исключение при этом.?

ConnectionOptions opts = new ConnectionOptions();

if (EncryptConnections)
{
    opts.Authentication = AuthenticationLevel.PacketPrivacy;
}

opts.Username = eventSource.user;
opts.SecurePassword = eventSource.password;
opts.Impersonation = ImpersonationLevel.Impersonate;

string location = string.Format("\\\\{0}\\root\\cimv2", eventSource.machine);
ManagementScope scope = new ManagementScope(location, opts);
scope.Connect();

EnumerationOptions enumOptions = new EnumerationOptions();
enumOptions.DirectRead = false;
enumOptions.EnumerateDeep = false;
enumOptions.ReturnImmediately = true;
enumOptions.Rewindable = false; 
enumOptions.Timeout = TimeSpan.MaxValue;
enumOptions.BlockSize = 10;

WqlObjectQuery query = new WqlObjectQuery("Select * from Win32_NTLogEvent Where Logfile = 'Security' AND TimeWritten >= '20110614025212.000000+000' AND TimeWritten <= '20110614030712.000000+000'");

ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query, enumOptions);

foreach (ManagementBaseObject mbo in searcher.Get() ) {
   // do Stuff
}

В реальном коде запрос будет меняться каждый раз, чтобы получить другой диапазон времени, но неполные результаты отображаются без него.

Каждый раз, когда вы запускаете эту команду, ManagementObjectCollectionвозвращается из searcher.Get() успешно перечисляет список - исключений не возникает, однако коллекция не всегда одинакова.

Коллекция может каждый раз заказываться по-разному, это ожидается.Коллекция не всегда содержит одинаковое количество событий для одного и того же временного диапазона, это неожиданно.

Похоже, что коллекции не удается получить полные результаты WMI после каждых нескольких сотен запросов.Он делает это тихо, никаких исключений или сообщений об ошибках, которые я обнаружил.

Мы определили, что «логические» операторы <= и < со временем не ведут себя так, как ожидалось, для некоторых журналовтипы файлов (по крайней мере, это был «Безопасность»), поэтому нам уже приходится иметь дело с перекрывающимися конечными временными точками с использованием включающего <= на каждом конце. </p>

Проблема потерянных результатов выше не связана с тем, что логический оператор не может включитьвремена, которые ==.

1 Ответ

2 голосов
/ 15 октября 2016

Я столкнулся с той же проблемой (SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor возвращает пустой результат. Wbemtest показывает 2 экземпляра).

Кажется, проблема возникает при использовании enumOptions.Rewindable = false; в соединении WMI, которое используется из разных потоков.

Удаление enumOptions.Rewindable = false решает для меня проблему.

...