我看过很多类似的帖子。但是没有一个符合我的要求。
我的目标是:
- 使用包含col 1 (
ADGroupName
), col 2 (extensionAttirbute1
)的CSV - 基于CSV从AD组中删除用户
- 基于CSV将用户加入AD组
我相信这可以简单地完成,然而,要使它与extensionAttribute1
值一起工作,证明是困难的。
我有两个函数。
- 首先创建要工作的csv。(工作)。
- 第二个功能是根据CSV的内容添加/删除AD组。(工作)。
下面是我在最后一个函数不起作用后擦掉各种代码位后留下的地方。
Function SyncGroups {
$Groups = Import-Csv "C:TempScriptsGroupMembership.csv"
foreach ($user in $Groups) {
Add-ADGroupMember -Identity $user.Group -Members $user.extensionAttribute1
Get-ADUser -Filter {extensionAttribute1 -eq $user.extensionAttribute1}
}
}
您面临的问题是对参数-Filter
如何工作的常见误解(参见对类似问题的回答)。最好将形参的实参视为字符串(因为它本质上就是字符串,尽管有表示法),并这样定义它。
将$user.extensionAttribute1
赋值给一个变量,并在表达式中使用该变量:
foreach ($user in $Groups) {
Add-ADGroupMember -Identity $user.Group -Members $user.extensionAttribute1
$attr = $user.extensionAttribute1
Get-ADUser -Filter "extensionAttribute1 -eq '$attr'"
}
或将$user.extensionAttribute1
放在子表达式中:
foreach ($user in $Groups) {
Add-ADGroupMember -Identity $user.Group -Members $user.extensionAttribute1
Get-ADUser -Filter "extensionAttribute1 -eq '$($user.extensionAttribute1)'"
}
谢谢Ansgar。
在尝试了你的代码后,我意识到我的顺序是错误的,所以下面是我如何设法让它工作。如果没有你对我的误解的清晰描述,我是不可能做到的。
$Groups = import-csv "C:TempScriptsGroupMembership.csv"
Foreach($user in $Groups){
$Member = Get-ADUser -Filter "extensionAttribute1 -eq '$($user.ExtensionAttribute1)'"
Add-ADGroupMember -Identity $user.Group -Members $Member
}
谢谢。