我已将用户和组导入到我的 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”的一部分。
我做错了什么或者错过了什么?
据推测,您有问题的 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 $_
}
}