найти дубликаты в массиве и распечатать их - PullRequest
0 голосов
/ 07 июня 2019

У меня есть следующий код:

cls
Get-Module -ListAvailable | Import-Module
Import-Module ActiveDirectory 
$Groups = Get-ADGroup -Filter {name -like 'XYZ'} | select name - 
ExpandProperty name
$i=0 
$tot = $Groups.count 
$Table = @()

$Record = @{
"Group Name" = ""
"Name" = ""
"username" = ""
}

Foreach ($Group in $Groups) {
#// Set up progress bar 
$i++ 
$status = "{0:N0}" -f ($i / $tot * 100) 
Write-Progress -Activity "Exporting AD Groups" -status "Processing 
Group $i of $tot : $status% Completed" -PercentComplete ($i / $tot * 
100) 
$Arrayofmembers = Get-ADGroupMember -identity $Group -recursive | 
select name, SamAccountName
foreach ($Member in $Arrayofmembers) {
$Record."Group Name" = $Group
$Record."Name" = $Member.name
$Record."username" = $Member.SamAccountName
$objRecord = New-Object PSObject -property $Record
$Table += $objrecord

}
 }
Write-Host $Table

, который отлично работает, но я хочу перечислить все дубликаты в $ Record. "Name" = $ Member.name с определенной группой, например:

username = barry дублируется в GROUP XYZ

я уже пробовал следующее:

ForEach ($Element in $Table)
{
If (($Table -match $Element).count -gt 1)
{
    "Duplicates detected" 

}
}

Ответы [ 2 ]

3 голосов
/ 07 июня 2019

Самый простой ответ - просто передать $Table на Group-Object и отфильтровать группы с числом, превышающим единицу в конце, следующим образом:

$Table | Group 'Group Name','Name' | Where{$_.Count -gt 1}

Если вы хотите сделать это вВ середине вашего цикла вы могли бы сделать это, сгруппировав результаты Get-ADGroupMember, но я думаю, что, вероятно, будет быстрее сделать все это в конце.

0 голосов
/ 07 июня 2019

Вы можете просто отслеживать участников, используя хеш-таблицу:

$seen = @{};
foreach ($Member in $Arrayofmembers)
{
    if($seen[$Member.Name])
    {
        Write-Host "$($Member.Name) is duplicated in group $Group";
    }
    else
    {
        $seen.Add($Member.Name, $true);
    }

    # ... rest of the loop
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...