Итак, я WMI запрашиваю удаленную машину, чтобы получить членов ее Administrators
группы:
SELECT PartComponent FROM Win32_GroupUser WHERE GroupComponent = "Win32_Group.Domain='MACHINE_NAME',Name='Administrators'"
Возвращает свойство PartComponent
в виде строк. Вот список (имена изменены для безопасности). Пользователи домена joeblow
и janedoe
действительно являются локальными администраторами на этом компьютере.
\\MACHINE_NAME\root\cimv2:Win32_UserAccount.Domain="MACHINE_NAME",Name="localadmin"
\\MACHINE_NAME\root\cimv2:Win32_Group.Domain="OUR_DOMAIN",Name="Domain Admins"
\\MACHINE_NAME\root\cimv2:Win32_UserAccount.Domain="OUR_DOMAIN",Name="joeblow"
\\MACHINE_NAME\root\cimv2:Win32_UserAccount.Domain="OUR_DOMAIN",Name="janedoe"
Я пересекаю вышеупомянутые результаты в цикле. В ней я делаю следующее:
ManagementObject isInThisUser = new ManagementObject(memberString);
Я делаю это, чтобы извлечь свойства домена и имени из каждого объекта-члена. В идеальном мире я бы получил следующий список строк в качестве конечного результата:
\\MACHINE_NAME\localadmin
\\OUR_DOMAIN\Domain Admins
\\OUR_DOMAIN\joeblow
\\OUR_DOMAIN\janedoe
Но вот что происходит: объекты ManagementObject
, созданные с помощью этого конструктора, появляются empty ! Домен, Имя, Подпись, все, все null
! За исключением первого (местный админ). Для этого конструктор работает как рекламируется.
Почему это происходит? Это потому, что пользователь, который делает запрос, не является администратором домена? (Однако является локальным администратором на целевой машине. На самом деле это OUR_DOMAIN\janedoe
.)