Вы можете использовать $ groups, которые у вас уже есть, для создания новой переменной с отфильтрованными объектами.
$groups = (Get-ADGroup -Filter "Name -like '*$($row.ClientCode)_*'" -SearchScope OneLevel -SearchBase "OU=Client-related Groups,OU=Some Groups,DC=somecompany,DC=com" | select -Expand Name).Name
$managers = $groups | ? { $_ -like "Manager*" }
$developers = $groups | ? {$_ -like "Developers*" }
Когда у вас есть три вещи, вы можете сохранить их в списке PSObject.
Создание списка объектов
$combined = @()
foreach($rec in $csv) {
if (!($Combined | ? { $_.ClientCode -eq $rec.ClientCode })) {
$filter = "*$($rec.ClientCode)_*"
$groups = (Get-ADGroup -Filter 'Name -like $filter' -SearchScope OneLevel -SearchBase "OU=Client-related Groups,OU=Some Groups,DC=somecompany,DC=com" | select Name).Name
$managers = $groups | ? { $_ -like "Manager*" }
$developers = $groups | ? {$_ -like "Developers*" }
$object = [PSCustomObject]@{
ClientCode = $rec.ClientCode
Groups = $groups
Managers = $managers
Developers = $developers
}
$Combined += $object
}
}
$combined
Обновление
Обратите внимание, что руководители и разработчики входят в список $combined
. Каждый элемент в $ комбинированном виде будет иметь различное количество менеджеров и разработчиков, что, я считаю, то, что вы ищете.
# Use this after you are done with your foreach loop to display the values in $combined
$combined | % { Write-Output "$($_.ClientCode) has $($_.Groups.Count) groups, $($_.Managers.Count) managers, and $($_.Developers.Count) developers" }
Вы также можете искать группы, менеджеров или разработчиков для уточнения c clientCode вот так
$result = $combined | ? {$_.ClientCode -eq "TestClientCode"}
$result.Groups
$result.Managers
$result.Developers