如何在其中一个列中循环显示包含多个值的CSV文件?

时间:2018-04-04 22:00:50

标签: powershell active-directory

我有一个CSV文件,其中包含一个列中的多个值。

基本上看起来像:

Name        NewName     Groups    
UserA       User01      IT Group;GroupB;Doc Users Group;GroupD

我需要知道如何遍历列以从中获取所有组名。

我使用了以下代码,但它不起作用。我认为问题是组名中的单词之间有空格,PowerShell将整个单元格视为一个组名。

foreach ($user in (Import-Csv "$env:USERPROFILE\desktop\info.csv")) {
    $oldusername = $user.name
    $newusername = $user.NewName
    $groups      = $user.Groups -split ";"

    foreach ($group in $groups) {
        Remove-ADGroupMember $group -Members $oldusername -Confirm:$false -Verbose
        Add-ADGroupMember $group -Members $newusername -Verbose
    }
}

所以我应该得到:

Remove-ADGroupMember IT Group

但我明白了:

Remove-ADGroupMember IT Group GroupB Doc Users Group GroupD

显然不起作用。

1 个答案:

答案 0 :(得分:0)

我没有复制/粘贴csv文件,我刚刚向您展示了文件中的值。

正确的csv内容是: “姓名”,“新名称”,“组”
“UserA”,“User01”,“IT Group; GroupB; Doc Users Group; GroupD”

我想我用循环解决了这个难题。有效的代码是:

foreach ($user in (Import-Csv "$env:USERPROFILE\desktop\info.csv")) {
$oldusername = $user.name
$newusername = $user.NewName
$groups      = $user.Groups 

foreach ($group in $groups -split ";") {
    Remove-ADGroupMember $group -Members $oldusername -Confirm:$false -Verbose
    Add-ADGroupMember $group -Members $newusername -Verbose
} }