-сплит в PowerShell, похоже, не работает для меня - PullRequest
0 голосов
/ 02 октября 2018

Я экспортирую файл CSV с именем учетной записи SAM и группами MembersOf.Когда я импортирую тот же CSV-файл и пытаюсь использовать поля группы.Я бы разделил их.Когда они разделены, я могу использовать их в Add-ADPrincipalGroupMemberShip.

elseif ($Answer -eq 'n') {
    Write-Warning "Verander de groepen in het CSV bestand: $ExCSV"
    Get-ADUser -Identity $ExSam -Properties sAMAccountName, MemberOf |
        Select-Object @{Name="User";expression={$ImSam}},
                      @{Name="Group";expression={$ImGroups}} |
        Export-Csv "$ExCSV" -Delimiter "," -Force -NoTypeInformation -Encoding UTF8
    [ValidateSet('OK')] $correct = Read-Host "Type 'OK' als je klaar bent"
    if ($correct = "OK") {
        $csv = Import-Csv "$ExCSV"        
        foreach ($user in $csv) {
            $csv2 = $csv.Group -replace ' ', ', '
        }

        Write-Output $csv2
        Add-ADPrincipalGroupMembership -Identity $ImSam -MemberOf "$csv2" 
        return
    }
}

Вывод, который я пишу:

csv2 output

Я получаю сообщение об ошибке:

error message

Мой CSV:

enter image description here

1 Ответ

0 голосов
/ 02 октября 2018

Похоже, что вы хотите преобразовать строку , содержащую список имен, в массив этих имен.

Это действительно -split оператор , который разрешает это, что позволяет сложное разбиение строки на массив токенов с использованием регулярных выражений .

В простейшем случае, если строка для разделения ($csv.Group, в вашем случае) всегда в форме '<name1>, <name2>[, ...]', используйте:

PS> 'test4, test5' -split ', '
test4
test5

Чтобы сделать это более надежным для защиты от начальных и конечных пробелов и пропусков после запятой:

PS> ' test4, test5,test6  ' -split ' +|,' -ne ''
test4
test5
test6

В частности, вам нужен массив имен, а не список строк, поскольку параметр Add-ADPrincipalGroupMembership -MemberOf ожидает массив группытождества (имена).

Предполагая, что вы изменили $csv2, чтобы он содержал массив, как описано выше, обратите внимание, что тогда вы не должны ссылаться на переменную, заключенную в "..." ("$csv2"),так как это превратит значение обратно в (одну) строку .
Поэтому сделайте вызов следующим образом:

Add-ADPrincipalGroupMembership -Identity $ImSam -MemberOf $csv2 # !! No "..."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...