Найдите несколько одинаковых объектов в массиве и сделайте что-нибудь с этими объектами

Мне нужен PowerShell-Script, который делает следующее:

  1. Получите AD-Groupmember шести различных AD-Groups.
  2. Показать только участников, которые состоят более чем в двух из этих групп объявлений.
  3. Удалите этих участников из этих AD-групп.

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

      $arrMembersADGroup1 = Get-ADGroupMember -Identity "AD-Group1" -Recursive | Get-ADUser -Properties Mail | Select-Object Mail
$arrMembersADGroup2 = Get-ADGroupMember -Identity "AD-Group2" -Recursive | Get-ADUser -Properties Mail | Select-Object Mail
$arrMembersADGroup3 = Get-ADGroupMember -Identity "AD-Group3" -Recursive | Get-ADUser -Properties Mail | Select-Object Mail
$arrMembersADGroup4 = Get-ADGroupMember -Identity "AD-Group4" -Recursive | Get-ADUser -Properties Mail | Select-Object Mail
$arrMembersADGroup5 = Get-ADGroupMember -Identity "AD-Group5" -Recursive | Get-ADUser -Properties Mail | Select-Object Mail
$arrMembersADGroup6 = Get-ADGroupMember -Identity "AD-Group6" -Recursive | Get-ADUser -Properties Mail | Select-Object Mail
$arrAllGroupMembers = $arrMembersADGroup1 + $arrMembersADGroup2 + $arrMembersADGroup3 + $arrMembersADGroup4 + $arrMembersADGroup5 + $arrMembersADGroup6

$arrAllGroupMembers | Group-Object -Property Mail -NoElement | Sort-Object -Property count -Descendin | Select-Object Name,count 

1 ответ

Следующее должно помочь, в основном создать вывод, имеющий пользователя и его соответствующую группу, которую ониmemberOf. Затем этот вывод передается вGroup-Objectгде объекты сгруппированы по их для последующей фильтрации, если есть более 2 сгруппированных объектов (это означает, что они будут членами 3 или более групп). Результат, который вы должны получить, - это пользовательскийsamAccountNameи все группыDistinguishedNameони являются членами.

      $groups = 'AD-Group1', 'AD-Group2', 'AD-Group3', 'AD-Group4', 'AD-Group5', 'AD-Group6'
$groups | ForEach-Object {
    $dn = (Get-ADGroup $_).DistinguishedName
    # find all recursive user object members of this group
    foreach($member in Get-ADUser -LDAPFilter "(memberOf:1.2.840.113556.1.4.1941:=$dn)") {
        [pscustomobject]@{
            samAccountName = $member.samAccountName
            MemberOf       = $dn
        }
    }
} | Group-Object samAccountName | Where-Object Count -GT 2
Другие вопросы по тегам