使用PowerShell通过CSV将多个AD用户添加到多个组中列是组名而不是标题组名下的用户

时间:2019-12-13 15:57:35

标签: powershell csv multiple-columns

我需要将ADUsers移至每个列中列出的每个ADGroup,这些列本身就是组名,所以$_.groups因为没有标题。

Example CSV

2 个答案:

答案 0 :(得分:1)

您将需要遍历列标题。您可以使用 Get-Member cmdlet获取这些属性的列表。

$usersToAdd = Import-CSV users.csv
$groups = ($usersToAdd | Get-Member | Where-Object { $_.MemberType -eq "NoteProperty" }).Name

从这里您可以遍历所有组,查询原始csv中每个组下的成员。

foreach ($group in $groups) {
    $users = $usersToAdd.$group
    foreach ($user in $users) {
        Add-ADGroupMember -Identity $group -Members $user -Confirm:$false
    }
}

如果某些列具有比其他列更多的用户,则您可能会得到一些空值,因此也许您也要检查一下。

foreach ($group in $groups) {
    $users = $usersToAdd.$group
    foreach ($user in $users) {
        if (![string]::IsNullOrEmpty($user)) {
            Add-ADGroupMember -Identity $group -Members $user -Confirm:$false
        }
    }
}

答案 1 :(得分:0)

谢谢您的回应Ash!我将尽快尝试确认。我在网上发现此脚本效果很好,尽管我仍在分解此脚本以完全理解它。再次感谢您的帮助!::

> $rows = Import-Csv "C:\FILE.csv" 
> $groups = @{} 
> foreach ($header in $rows[0].PSObject.Properties.Name) { $groups[$header] = @() } 
> foreach ($row in $rows) 
> {
>     [string[]]$keys = $groups.Keys
>     foreach ($key in $keys)
>     {
>         if ($row.$key) { $groups[$key] += $row.$key }
>     }
> } 
>foreach ($key in $groups.Keys) { Add-ADGroupMember -Identity $key -Members $groups[$key] -Verbose }