Как выбрать одно поле из класса Win32 WMI?

Классы Win32 в ОС Windows представляют собой группы Оборудование, Программное обеспечение или ОС классы (наряду с другими), которые содержат функции и атрибуты в зависимости от выбранного класса. Моя проблема связана с Win32_CDROMDrive, который имеет множество свойств. подключенного оптического устройства, например Caption, Description, Drive, Id, Name и т. д.). Проблема (конкретно) связана со свойством SerialNumber, которое возвращает идентификатор диска производителем. Он возвращает null в случае и возвращает фактическое значение в другом случае! Код проведет вас через:

Вот как перечислить все свойства Win32_CDROMDrive (SerialNumber существуют с фактическим значением).

var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_CDROMDrive");
foreach (ManagementObject mo in searcher.Get())
    foreach (PropertyData pd in mo.Properties)
        Console.WriteLine("{0}:- {1}", pd.Name, pd.Value);

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

var searcher = new ManagementObjectSearcher("SELECT Name FROM Win32_CDROMDrive");

Чтобы получить значение свойства SerialNumber, запрос меняется на (и вот в чем проблема, он вернет null, хотя раньше этого не было!)

var searcher = new ManagementObjectSearcher("SELECT SerialNumber FROM Win32_CDROMDrive");

Более странное поведение - это когда я пытаюсь получить значение свойства с другим случайным, подобным этому (оно возвращает фактические значения как для Name, так и для SerialNumber)

var searcher = new ManagementObjectSearcher("SELECT SerialNumber, SCSIPort FROM Win32_CDROMDrive");

А если со свойством с другим начальным значением (оно вернет null для SerialNumber и фактическое значение для Name)

var searcher = new ManagementObjectSearcher("SELECT SerialNumber, Name FROM Win32_CDROMDrive");

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

Я просто хочу получить SerialNumber исключительно как этот SELECT SerialNumber FROM Win32_CDROMDrive без извлечения всех значений и выбора между ними.


person Peter Tovar    schedule 06.07.2018    source источник