Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает об использовании Windows PowerShell и ассоциаций WMI для определения групп, членом которых является пользователь.
Используем класс ассоциаций для определения членства в группах
Вчера я рассказывал об использовании ассоциаций WMI для определения членов локальной группы администраторов. Сегодня я займусь обратным – я буду определять группы, членом которых является определенный пользователь.
Что следует знать о классах ассоциаций, это то, что они работают в обе стороны. Таким образом вы всегда можете указать одного участника ассоциации, чтобы найти другого.
Предположим следующую ситуацию. Я проверял членов группы администраторов на определенном компьютере. Для этого я могу воспользоваться кодом из вчерашней статьи. И я обнаружил в группе администраторов пользователя, которого там быть не должно. Я решил узнать, членом каких еще групп является этот пользователь. В Windows PowerShell 2.0 я могу использовать следующий код.
Get-WmiObject win32_groupuser |
Where-Object { $_.partcomponent -match ‘name=»ed»‘} |
Foreach-Object {[wmi]$_.groupcomponent}
(Не забывайте о том, что код может быть немного сокращен путем использования алиасов.)
Когда я запущу этот код, в консоли появится следующее.
16:28 C:\> gwmi win32_groupuser |
>> Where-Object { $_.partcomponent -match ‘name=»ed»‘} |
>> Foreach-Object {[wmi]$_.groupcomponent}
>>
Caption Domain Name SID
——- —— —- —
EDLT\Administrators EDLT Administrators S-1-5-32-544
IAMMRED\Domain Admins IAMMRED Domain Admins S-1-5-21-14579568…
IAMMRED\Domain Users IAMMRED Domain Users S-1-5-21-14579568…
Если же я могу воспользоваться Windows PowerShell 3.0, я могу выполнить этот запрос с помощью CIM-командлетов. Для начала мне нужно получить экземпляр WMI-класса Win32_UserAccount при помощи командлета Get-CimInstance. Я укажу параметр -filter, чтобы получить данный только о конкретном пользователе. Я передам этот экземпляр командлету Get-CimAssociatedInstance и укажу ассоциативный класс Win32_GroupUser.
Get-CimInstance -Filter «name = ‘ed'» -ClassName win32_useraccount |
Get-CimAssociatedInstance -Association win32_groupuser
Команда и ее вывод приведены ниже.
16:31 C:\> Get-CimInstance -Filter «name = ‘ed'» -ClassName win32_useraccount |
>> Get-CimAssociatedInstance -Association win32_groupuser
>>
SID Name Caption Domain
— —- ——- ——
S-1-5-32-544 Administrators EDLT\Administrators EDLT
S-1-5-21-1457956834… Domain Admins IAMMRED\Domain Admins IAMMRED
S-1-5-21-1457956834… Domain Users IAMMRED\Domain Users IAMMRED
На сегодня все.
Автор:
Ed Wilson, Microsoft Scripting Guy
Оригинал:
Страницы в социальных сетях:
Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell