Powershell AD: подсчет групп в офисе - PullRequest
0 голосов
/ 26 сентября 2018

У меня проблемы с мыслительным процессом.Я хочу получить что-то вроде «Имя группы», «Название», «Количество», и я могу получить столбцы «Имя группы» и «Название», но я не уверен, как считать, скажем, все повторяющиеся группы.в названии «продажи».Там, где мой код находится прямо сейчас, выполняется поиск по всему столбцу, чтобы узнать, находит ли он это имя группы, и если он находит этот столбец, а затем перемещает счетчик на 1 (это неправильно, потому что он может найти имя группы с другим названием)

Любая помощь будет принята с благодарностью!Спасибо

$allOffices = get-aduser -filter * -Properties physicaldeliveryofficename | Select-Object -ExpandProperty physicaldeliveryofficename #Selecting all offices
$uniOffices = $allOffices | Select-Object -Unique
$groups = $null
$global:ErrorActionPreference = 'silentlycontinue'
$finallist = @()
$count = 0


foreach ($office in $uniOffices) {   # Loop through all unique offices
    $peopleInOffice = $null
    $peopleInOffice = get-aduser -filter * -properties office | Where-Object office -eq $office | Select-Object -ExpandProperty SamAccountName  # Array of people in a certain office, selects username
    foreach ($person in $peopleInOffice){
        $groups = get-ADPrincipalGroupMembership $person
        foreach($group in $groups) {
                if(($finallist.'Group Name'-contains $group.name) -and ($finallist.'Title' -contains $office)){$count++}
                $finallist+=  $group| Select-Object @{N='Group Name';E={$group.name}},@{N='Title';E={($office)}},@{N='Count';E={$count}}
        }
    }
}

$finallist

1 Ответ

0 голосов
/ 26 сентября 2018

Итак, я начал работать над вашей проблемой, и я не уверен, что вы спрашиваете.Вот значительно упрощенное и более эффективное представление вашего кода:

$offices = Get-ADUser -Filter 'PhysicalDeliveryOfficeName -like "*"' -Properties PhysicalDeliveryOfficeName |
    Select-Object -ExpandProperty PhysicalDeliveryOfficeName -Unique

$list = foreach ($office in $offices)
{
    foreach ($person in (Get-ADUser -Filter "Office -eq '$office'" -Properties Office, MemberOf))
    {
        $person.MemberOf |
            Get-ADGroup -Properties Name |
            Select-Object -Property @(
                @{
                    N = 'Group Name'
                    E = {$PSItem.Name}
                }
                @{
                    N = 'Title'
                    E = {$office}
                }
            )
    }
}

В конце у вас есть объект $list, представляющий собой массив pscustomobject объектов, которые вы можетеманипулировать.Вы можете использовать Group-Object, чтобы определить, сколько существует групп с похожими именами, используя вычисляемые свойства и т. Д.


Используя формулировку задачи:

как подсчитать всеповторяющиеся группы в заголовке sales

$list | Group-Object -Property Title | Select-Object -ExpandProperty Count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...