Резюме: Microsoft Scripting Guy, Ed Wilson как использовать Windows PowerShell и ассоциации WMI CIM для определения локальных администраторов.
Используем WMI для определения членов локальной группы администраторов
Я люблю простоту. Если вы знаете Windows Management Instrumentation (WMI), мир администрирования Windows откроется перед вами. На самом деле, внедрение CIM-командлетов в Windows PowerShell 3.0 и движение в сторону Open Management Infrastructure (OMI) ведет к тому, что знание этой технологии становится все более необходимым – это те знания, на которые вы можете опираться снова и снова в вашей каждодневной работе.
Сегодня я игрался к классами ассоциаций WMI и решил уделить немного времени исследованию класса Win32_GroupUser.
Заметка: я рассказывал об ассоциациях в посте Используем CIM-командлеты PowerShell для определения WMI-ассоциаций.
Этот ассоциативный класс ссылается на два других класса: Win32_Group и Win32_Account.
15:56 C:\> Get-CimClass win32_groupuser | select -expand cimclassproperties
Name : GroupComponent
Value :
CimType : Reference
Flags : Property, Key, ReadOnly, NullValue
Qualifiers : {Aggregate, read, key, MappingStrings…}
ReferenceClassName : Win32_Group
Name : PartComponent
Value :
CimType : Reference
Flags : Property, Key, ReadOnly, NullValue
Qualifiers : {read, key, MappingStrings, Override}
ReferenceClassName : Win32_Account
Используя Windows PowerShell 2.0 (или Windows PowerShell 3.0), я могу напрямую запросить этот ассоциативный класс при помощи командлета Get-WMIObject. Затем я могу отфильтровать результаты, чтобы получить только те значения, где GroupComponent равно «administrators». Для каждого возвращенного экземпляра я использую ускоритель [wmi], чтобы получить экземпляр класса, содержащийся в свойстве PartComponent.
Get-WmiObject win32_groupuser |
Where-Object { $_.GroupComponent -match ‘administrators’ } |
ForEach-Object {[wmi]$_.PartComponent }
Когда я запущу этот код, в консоли появится следующее:
16:03 C:\> Get-WmiObject win32_groupuser |
>> Where-Object { $_.groupcomponent -match ‘administrators’ } |
>> ForEach-Object {[wmi]$_.partcomponent }
>>
AccountType : 512
Caption : edLT\Administrator
Domain : edLT
SID : S-1-5-21-3464415469-1849125893-2015719117-500
FullName :
Name : Administrator
AccountType : 512
Caption : edLT\ed
Domain : edLT
SID : S-1-5-21-3464415469-1849125893-2015719117-1001
FullName :
Name : ed
Caption : IAMMRED\Domain Admins
Domain : IAMMRED
Name : Domain Admins
SID : S-1-5-21-1457956834-3844189528-3541350385-512
Предыдущая команда – это одна строка, разделенная символом конвейера для удобства восприятия. Используя синтаксис Windows PowerShell 3.0 и несколько алиасов, я могу сократить команду до одной строки.
gwmi win32_groupuser | ? groupcomponent -match ‘administrators’ | % {[wmi]$_.partcomponent}
Используем CIM-командлеты PowerShell 3.0 для получения списка локальных администраторов
Я могу запрашивать те же классы, используя CIM-командлеты Windows PowerShell 3.0. Это немного упростит код. Первое, что мне нужно сделать, это получить экземпляр CIM. Для этого я воспользуюсь командлетом Get-CimInstance. Я укажу класс Win32_Group и получу только группу «administrators». Я передам результаты командлету Get-AssociatedInstance. Таким образом я выполню запрос ассоциированных классов на основе имени класса ассоциаций.
Как вы можете видеть, важно знать, какие классы объединяются классами ассоциаций. Я это знаю, так как я умею пользоваться CIM-командлетами для просмотра ассоциаций. Теперь мне нужно указать, что я собираюсь получить ассоциации и указать нужный ассоциативный класс.
Get-CimInstance -ClassName win32_group -Filter «name = ‘administrators'» |
Get-CimAssociatedInstance -Association win32_groupuser
Команда и ее вывод приведены ниже.
16:06 C:\> Get-CimInstance -ClassName win32_group -Filter «name = ‘administrators'» |
>> Get-CimAssociatedInstance -Association win32_groupuser
>>
Name Caption AccountType SID Domain
—- ——- ———— — ——
Administrator edLT\Administ… 512 S-1-5-21-3464… edLT
ed edLT\ed 512 S-1-5-21-3464… edLT
Caption : IAMMRED\Domain Admins
Domain : IAMMRED
Name : Domain Admins
SID : S-1-5-21-1457956834-3844189528-3541350385-512
Автор:
Ed Wilson, Microsoft Scripting Guy
Оригинал:
Страницы в социальных сетях:
Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell