Можно ли отфильтровать результаты и назначить переменную? - PullRequest
0 голосов
/ 29 января 2020

В настоящее время я создаю таблицу ha sh с ключом ClientCode и значениями, представляющими собой любые группы в AD, в имени которых есть 'Clientcode_'. Например, группы под названием «Managers_for_client_1234_group» и «Developers_for_client_1234_group»

$clientTable = @{ }

foreach ($row in $cemTable) {
    $clientCode = "$($row.ClientCode)"
    $groups = @(Get-ADGroup -Filter "Name -like '*$($row.ClientCode)_*'" -SearchScope OneLevel -SearchBase "OU=Client-related Groups,OU=SomeGroups,DC=somecompany,DC=com" | select -Expand Name)
    write-host "Found $($groups.count) group(s) for: $($row.ClientCode)"
    $clientTable[$clientCode] = $groups -join ","
}

$ clientTable

Теперь я хочу просмотреть результаты поиска Get-AdGroup и назначить их переменным в зависимости от группа. Например, все группы в моем поиске, которые являются менеджерами, будут назначены переменной менеджеров и одинаковы для других ролей. Это позволит мне автоматизировать и изменить телеметрию в будущем, если я захочу изменить / ограничить / предоставить доступ и т. Д. c. Пока я отредактировал это.

foreach($row in $cemTable) {

    $clientCode = "$($row.ClientCode)"

    $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)

    write-host "Found $($groups.count) group(s) for: $($row.ClientCode)"

    $managers_group =

    $developers_group =

}

ОБНОВЛЕНИЕ

$combined = @()
foreach($rec in $hashTable) { 

    if (!($Combined | ? { $_.ClientCode -eq $rec.ClientCode })) {

        $filter = "*$($rec.ClientCode)_*"
        $groups = (Get-ADGroup -Filter 'Name -like $filter' -SearchScope OneLevel -SearchBase $MY_OU | select Name).Name
        $managers = $groups | ? { $_ -like "_Man*" }
        $developers = $groups | ? {$_ -like "_Dev*" }

        $object = [PSCustomObject]@{
            ClientCode = $rec.ClientCode
            Groups = $groups
            Managers = $managers
            Developers = $developers
        }

        $Combined += $object
    }
}

$combined
$managers.Count
$developers.Count

Ответы [ 2 ]

1 голос
/ 30 января 2020

Вы можете попробовать:

$managers = $groups -like "Manager*" 
$developers = $groups -like "Developers*"

Затем используйте

$managers.count
$developers.count

, чтобы увидеть, сколько элементов хранится в вашей переменной

1 голос
/ 29 января 2020

Вы можете использовать $ 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
...