sergey vasin

The IT blog

Weekend Scripter: Определяем локальных администраторов компьютера при помощи PowerShell – Hey, Scripting Guy! Blog

leave a comment »

Резюме: 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

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2012/12/15/weekend-scripter-use-powershell-to-find-local-administrators-on-a-computer.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Декабрь 29, 2012 в 12:07

Опубликовано в HeyScriptingGuyBlog, PowerShell

Tagged with , ,

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s