Проверьте, является ли кто-либо из списка пользователей членом группы AD. - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть список пользователей и список групп AD.Я хотел бы знать, является ли кто-либо из пользователей членом этих групп.

  • Мне не нужно знать, какие члены являются членами какой группы.
  • Мне просто нужно знать, совпадает ли ЛЮБОЙ пользователь с Группой, если совпадение существует, выходное совпадение найдено и имя группы.

У меня есть этот код:

$users = Get-Content C:\test\testusers.csv
$groups = Get-Contect C:\test\testgroups.csv
foreach ($user in $users) {
    foreach ($group in $groups) {
        $members = Get-ADGroupMember -Identity $group -Recursive |
                   Select -ExpandProperty SamAccountName
        if ($members -contains $user) {
            Write-Host "Match Found $group"
        }
    }
}

Я провел тест на 4 пользователя и 3 группы объявлений, и это дает мне то, что мне нужно.Я получаю вывод:

  • Соответствие найденному имени группы 1
  • Соответствие найденному имени группы 2
  • Соответствие найденному имени группы 1

Насколько я понимаю,что это сканирование каждого пользователя по всем группам, а затем по всем группам.Хотя это работало для моей тестовой партии в небольших количествах, мне нужно отсканировать 2000 пользователей по 1100 группам.

Я так понимаю, потому что я сканирую пользователей по группам?и нужно сканировать группы для пользователей?

Есть ли способ, которым я могу поставить строку кода, в которой говорится, если найден переход в следующую группу?

1 Ответ

0 голосов
/ 28 ноября 2018

Есть ли где-нибудь, я могу поставить строку кода, которая говорит, если найден перейти к следующей группе?

Да, вы можете использовать ключевое слово break, чтобы разбитьforeach loop.

Тем не менее, я предлагаю решить ваше требование по-разному.

Мне просто нужно знать, соответствует ли ЛЮБОЙ пользователь группе, если совпадение существует, выходное совпадение найдено иимя группы.

Более эффективно, чем разрыв после первого совпадения, это всегда запрашивать группу один раз.Есть разные варианты.Одним из вариантов будет использование Compare-Object для поиска имен, которые являются членами группы и частью вашего входного CSV, что в точности соответствует тому, что вы называете совпадением.

$users = Get-Content C:\test\testusers.csv
$groups = Get-Content C:\test\testgroups.csv

foreach ($group in $groups) {

    $members = Get-ADGroupMember -Identity $group -Recursive

    if (Compare-Object -ReferenceObject $members.SamAccountName -DifferenceObject $users -ExcludeDifferent -IncludeEqual) {
        $group
    }

}
...