PowerShell中的-split似乎对我不起作用

时间:2018-10-02 14:21:10

标签: powershell

我导出带有SAM帐户名和MemberOf组的CSV文件。 当我导入相同的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 :(得分:1)

您似乎想将包含名称列表的 string 转换为这些名称的 array

-split operator确实可以实现这一点,它允许使用regular expressions将字符串复杂地拆分为令牌数组。

在最简单的情况下,如果要拆分的字符串(在您的情况下为$csv.Group始终为'<name1>, <name2>[, ...]'形式,请使用:

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

要使其更加健壮,可以防止逗号前后出现空格和空格:

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

具体来说,您需要名称的 array 而不是字符串列表,因为Add-ADPrincipalGroupMembership的{​​{1}}参数期望组的 array 身份(名称)。

如上所述,假设您已经修改了-MemberOf以包含一个数组,请注意,那么您就不必引用$csv2"...")中包含的变量,因为会将值转换回一个(单个)字符串
因此,请按以下方式进行呼叫:

"$csv2"