使用 Powershell、CSV 和扩展属性 1 管理 AD 组成员



我看过很多类似的帖子。但是没有一个符合我的要求。

我的目标是:

  • 使用包含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
}  

谢谢。

最新更新