Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Поиск пользователей в AD являющихся членами нескольких (заданных) групп (http://forum.oszone.net/showthread.php?t=280315)

rudimko 04-04-2014 11:57 2332949

Поиск пользователей в AD являющихся членами нескольких (заданных) групп
 
Доброго дня коллеги.
Не могу решить очень простую, на первый взгляд казалось бы для меня, задачу ;)

Есть группы безопасности в 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 2332956

$user.MemberOf -match "Gr1|Gr2|Gr3"

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

rudimko 04-04-2014 12:13 2332957

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

Kazun 04-04-2014 12:14 2332958

@($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 2332964

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

Kazun 04-04-2014 12:46 2332965

Зависит от шаблона. Например:
Код:

-match "Группа-\d{1,2}\b"

rudimko 04-04-2014 12:54 2332968

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

ratibor79 04-04-2014 13:12 2332973

А если так?

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

rudimko 04-04-2014 13:25 2332978

Цитата:

Цитата ratibor79
А если так?
Get-ADUser -Identity User1 -Property Memberof | Select -ExpandProperty MemberOf »

Проясни, пожалуйста Select -ExpandProperty MemberOf...

ratibor79 04-04-2014 13:49 2332985

Цитата:

Цитата rudimko
Проясни, пожалуйста 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 2332992

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


Время: 19:53.

Время: 19:53.
© OSzone.net 2001-