Войти

Показать полную графическую версию : Поиск пользователей в AD являющихся членами нескольких (заданных) групп


rudimko
04-04-2014, 11:57
Доброго дня коллеги.
Не могу решить очень простую, на первый взгляд казалось бы для меня, задачу ;)

Есть группы безопасности в AD, к примеру Группа-1, Группа-2, Группа-3 и так далее. Как мне найти пользователей, которые входят сразу в несколько групп одновременно? Например user, являясь членом группы Группа-1 - это норма, но если он является членом группы Группа-1 и Группа-2 или Группа-1 и Группа-3 или Группа-1, Группа-2 и Группа-3 и множество подобных значений - этой фейл. Мне нужно поймать этих пользователей из всего каталога.

Пробовал так:

$users= Get-ADUser -Filter {Enabled -eq "True"} -Properties "MemberOf"
foreach ($user in $users)
{
if ($user.MemberOf -like "*Группа-*Группа-*")
{
$user.Name
}
}

Понял что делаю неправильно, так как поле memberOf имеет не строковый параметр... Как произвести верную выгрузку пользователей? Спасибо заранее.

Kazun
04-04-2014, 12:10
$user.MemberOf -match "Gr1|Gr2|Gr3"

Ps. А не проще идти от обратного? Получить список пользователей данных групп?

rudimko
04-04-2014, 12:13
Не... Это я так понимаю "или". Пользователь априори должен быть в одной группе из перечисленных, надо найти тех, кто находится больше чем в одной из заданных.

Kazun
04-04-2014, 12:14
@($user.MemberOf -match "Gr1|Gr2|Gr3").Count -ge 2

или если через группы:

"Gr1","Gr2","Gr3" | Get-ADGroupMember | Where objectClass -eq user | Group Name | where Count -ge 2

rudimko
04-04-2014, 12:39
Хм... Понял, спасибо. А можно как-то группы по маске указать "Группа-*" к примеру? У меня из уж 33 и могут динамически увеличиваться в кол-ве.

Kazun
04-04-2014, 12:46
Зависит от шаблона. Например:
-match "Группа-\d{1,2}\b"

rudimko
04-04-2014, 12:54
Понял, спасибо.
Но, я так понимаю, чтобы искать четкое соответствие, лучше использовать не совпадение по -match, а командлет Get-ADGroupMember. Верно?

ratibor79
04-04-2014, 13:12
А если так?

Get-ADUser -Identity User1 -Property Memberof | Select -ExpandProperty MemberOf

rudimko
04-04-2014, 13:25
А если так?
Get-ADUser -Identity User1 -Property Memberof | Select -ExpandProperty MemberOf »Проясни, пожалуйста Select -ExpandProperty MemberOf...

ratibor79
04-04-2014, 13:49
Проясни, пожалуйста Select -ExpandProperty MemberOf... »

Без -ExpandProperty и вывод свойства "Memberof" будет в одну строку, что совсем не удобно.

Так более наглядно будет. Попробуй.
foreach ($Group in Get-ADUser -Identity User1 -Property Memberof | Select -ExpandProperty MemberOf) {(Get-ADGroup $Group).Name}

rudimko
04-04-2014, 14:09
ratibor79, ну я так понимаю это просто список групп и все. Мне же надо было выборку на членство в указанных группах, для тех кто более, чем в одной из них.




© OSzone.net 2001-2012