Как искать имя группы Active Directory из CSV в PowerShell? - PullRequest
2 голосов
/ 28 января 2020

Если у меня есть .csv:

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

, и я хочу получить хеш-таблицу с ClientCode в качестве ключа и значениями для всех групп AD с ClientCode, например, :

ClientCode GroupCode      
---------- ---------      
1234       ClientGroup_InAD_1234, some_other_client_1234    
1235       ClientGroup_InAD_1235, some_other_client_in_AD_1235
1236       ClientGroup_InAD_1236

Как мне go об этом?

По сути, у меня есть группы клиентов в Active Directory, и у каждого клиента есть код, который совпадает с 'ClientCode' в CSV. Например, у меня может быть клиент по имени «Боб», которому я назначил код «1234». Следовательно, группа для Боба в AD будет «Bob_1234». По сути, я хочу иметь возможность искать любые группы, в которых есть ClientCode. Поэтому я хочу найти все группы AD, которые имеют «1234». Это вернуло бы «Bob_1234», и любая группа в AD также имела бы «1234» в своем названии.

До сих пор я пробовал:

$clientTable = @{}

foreach($rec in $csv_data) {
    $groups = @(get-adgroup -Filter "name -like '*$($rec.clientcode)_*'")
    write-host "Found $($groups.count) group(s) for: $($rec.clientcode)"
    $clientTable[$ClientCode] = @($groups)
}

$clientTable

, но я не получаю желаемого выход

Ответы [ 3 ]

2 голосов
/ 28 января 2020

Вы можете использовать l oop, как это. Вам нужно будет искать с * в начале имени, которое вы хотите найти через фильтр.

foreach($rec in $csv) { 
    $clientCode = "*_$($rec.ClientCode)"
    if (!($clientTable.ContainsKey($clientCode))) {
        $names = Get-ADGroup -Filter 'Name -like $clientCode' | select Name
        $clientTable[$clientCode] = $names -join ","
    }
}

Это также проверит все идентификаторы клиентов, которые уже были проверены, и проигнорирует их.

2 голосов
/ 28 января 2020

Перед извлечением групп необходимо будет дублировать ClientCodes в CSV. Нечто подобное ниже должно сделать это (при условии, что ClientCode всегда предшествует знак подчеркивания, как в _1234, как показано в ваших примерах)

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

$clientTable = @{}

$csv | Select-Object -ExpandProperty ClientCode -Unique | ForEach-Object {
    # $_ is a single clientcode in each iteration (string)

    # get an array of goup names
    $groups = @(Get-ADGroup -Filter "Name -like '*_$_'" | Select-Object -ExpandProperty Name)
    Write-Host "Found $($groups.Count) group(s) for code : '$_'"
    $clientTable[$_] = $groups -join ', '
}

$clientTable
2 голосов
/ 28 января 2020

Если вам нужна таблица ha sh, заполненная значением ключа ClientCode, вы можете сделать следующее:

$clientTable = @{}

foreach($rec in $csv_data){
    $groups = @(Get-ADGroup -Filter "Name -like '*_$($rec.ClientCode)'" | Select -Expand Name)
    write-host "Found $($groups.count) group(s) for: $($rec.ClientCode)"
    $clientTable[$rec.ClientCode] = $groups

}

$clientTable

Имейте в виду, что каждое значение в ха sh таблица представляет собой массив имен групп. Если вы хотите одну строку с именами, разделенными запятыми, вы можете вместо этого сделать $clientTable[$rec.ClientCode] = $groups -join ",".

...