使用 PowerShell 将成员添加到一个或多个 Active Directory 组

问题描述 投票:0回答:1

我已将用户和组导入到我的 AD 中。

我想要实现的是将用户添加到多个组。

我的意思是,user01 属于 It、Security、Admin 组。

在导入用户时,我使用了一个 CSV 文件,其简历如下所示:

Username,Group
user01,It,Security,Admin
user02,It
user03,Finance,Hr

导入代码有效,foreach 从 csv 创建所有用户,与组导入相同。

但是我正在尝试另一个 foreach 来执行这些会员资格,我正在使用 Add-ADPrincipalGroupMembership 来实现此目的,到目前为止我有以下代码:

ForEach ($User in $Users) {
Add-ADPrincipalGroupMembership -MemberOf $User.'Group' -Identity $Users.'Username' -ErrorAction Stop -Verbose
}

但它只是将用户分配到 csv 中的第一个组,而不是全部分配到组密钥下。 即 user01 和 user02 仅是“It”的一部分,而 user03 仅是“Finance”的一部分。

我做错了什么或者错过了什么?

powershell foreach active-directory
1个回答
0
投票

据推测,您有问题的 CSV 正是您的 CSV 的样子,这解释了问题:

但它只是将用户分配到 csv 中的第一个组,而不是全部分配到 Group Key 下

您使用

,
作为组分隔符,而 CSV(逗号分隔值)默认使用相同的分隔符,因此您会丢失数据:

@'
Username,Group
user01,It,Security,Admin
user02,It
user03,Finance,Hr
'@ | ConvertFrom-Csv

# Outputs:

Username Group
-------- -----
user01   It
user02   It
user03   Finance

解决问题的第一步是为您的组使用不同的分隔符,例如

;
:

Username,Group
user01,It;Security;Admin
user02,It
user03,Finance;Hr

完成此操作后,您将遇到的下一个问题是您可以将一个以分号分隔的字符串传递给

-MemberOf
参数,它需要是一个组数组,这导致使用
String.Split
每个对象的
.Group
 属性上的方法

Import-Csv path\to\thecsv.csv | ForEach-Object {
    $addADPrincipalGroupMembershipSplat = @{
        MemberOf = $_.Group.Split(';', [System.StringSplitOptions]::TrimEntries)
        Identity = $_.Username
        # AD Cmdlets don't require -ErrorAction,
        # their default behavior is to throw terminating errors invariantly
    }

    try {
        Add-ADPrincipalGroupMembership @addADPrincipalGroupMembershipSplat
    }
    catch {
        # Error handling here
        Write-Warning $_
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.