Создание сопоставления из CSV для получения пользователей AD - PullRequest
1 голос
/ 23 января 2020

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

ClientCode,GroupCode
1234,ABC
1234,DEF
1235,ABC

GroupCode - это код для группы Active-Directory.

Пример:

GroupAcronym 'AB C' отображается на Группа AD с именем «Group_One»

GroupCode «DEF» сопоставляется с группой AD с именем «Group_Two»

GroupCode «GHI» сопоставляется с группой AD с именем «Group_Three»

У каждой из этих групп AD есть пользователи. Пример:

Пользователи в AD 'Group_One': Джон Доу, Джессика Симмонс

Пользователи в AD 'Group_Two': Картер МакКарти, Джереми L

Пользователи в AD 'Group_Three' : Alyson Carter, Eri c Cross, Alejandra Fischer

По сути, я хочу создать какое-то отображение или способ связать 'GroupCode' в моем CSV с AD-группами, а затем перечислить его пользователей в хеш-таблица.

Желаемый результат будет:

ClientCode GroupUsers      
---------- ---------      
1234       John Doe, Jessica Simmons, Carter McCarthy, Jeremy L        
1235       John Doe, Jessica Simmons
1236       Alyson Carter, Eric Cross, Alejandra Fischer

Ответы [ 2 ]

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

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

# create a mapping hash for the group codes to the real group names
$groupsMap = @{
    'ABC' = 'Group_One'
    'DEF' = 'Group_Two'
    'GHI' = 'Group_Three'
    #etc.
}

$csv = Import-Csv -Path 'ClientGroupCodes.csv'

# loop though the csv items, group by property ClientCode
$result = $csv | Group-Object ClientCode | ForEach-Object {
    # get an array of the various group codes inside each client group
    $groupCodes = $_.Group.GroupCode | Select-Object -Unique

    # loop through these codes, find the real names from the hash 
    # and collect the user names in variable $groupUsers
    $groupUsers = New Object 'System.Collections.Generic.List[string]'
    foreach ($code in $groupCodes) {
        # test if the group code can be found in the hash
        if ($groupsMap.ContainsKey($code)) {
            $users = [string[]](Get-ADGroupMember -Identity $groupsMap[$code] | Where-Object { $_.objectClass -eq 'user' }).Name
            $groupUsers.AddRange($users)
        }
        else {
            Write-Warning "No mapping found for group code $code"
        }
    }

    # output an object with the properties combined
    [PsCustomObject]@{
        'ClientCode' = $_.Name
        'GroupUsers' = ($groupUsers.ToArray() | Sort-Object -Unique) -join ', '
    }
}

# output on screen
$result

# output to CSV file
$result | Export-Csv -Path 'GroupUsersPerClient.csv' -NoTypeInformation
1 голос
/ 24 января 2020

Чтобы помочь вам начать, вы можете добавить GroupCode к одному полю заметок в объекте группы AD. Затем с помощью

get-adgroup Group1 -Properties info

вы сможете получить доступ к этим данным.

Я видел, что вы или кто-то разместил здесь тот же вопрос, кажется, кто-то предложил: https://community.spiceworks.com/topic/2253543-creating-mapping-from-csv-to-get-ad-users?page=1#entry -8732830

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