我正在尝试根据 "title" 属性中的值将成员添加到 AD 组

  • 本文关键字:成员 添加 AD 属性 title powershell
  • 更新时间 :
  • 英文 :


我正试图根据"title"中的值向AD组添加成员。属性。我有大约30种不同的瓷砖想要使用。有没有一种方法来编写没有30 "OR"语句?

感谢
Get-ADuser -filter {(title -eq "SECSCH") -or (title -eq "SEC12") -or (title -eq 
"LTOSEC") -or (title -eq "LTO12")} | %{Add-ADGroupMember "SDK test print color" 
$_.SamAccountName} 

另外,对于另一组,我想要All " custody "在标题中,除了位置"85 "one_answers"42 c"下面是我在哪里。

Get-ADuser -filter {(title -eq "custod") -and (locationNumber -ne "85c") -or (title -eq 
"custod") -and (locationNumber -ne "42c")} | %{Add-ADGroupMember "SDK test print 
convert" $_.SamAccountName}

对于你的第一个问题,你可以创建一个包含你的标题的数组并浏览它。

的例子:

$Titles = "SECSCH","SEC12","LTOSEC","LTO12"
foreach($Title in $Titles){
Get-ADuser -filter {title -eq $Title} | %{Add-ADGroupMember "SDK test print color" $_.SamAccountName} 
}

-Members参数可以采用ADPrincipal对象的数组,因此您可以做的不是在过滤器中使用如此多的'OR',而是在之后使用Where-Object子句。

这将允许您使用-contains-match等操作符

$titles = "SECSCH","SEC12","LTOSEC","LTO12" # your 30+ titles here
$users  = Get-ADUser -Filter * -Properties Title | Where-Object { $titles -contains $_.Title }
Add-ADGroupMember -Identity "SDK test print color" -Members $users
对于第二个代码,将Filter更改为 下面
$filter = "Title -eq 'custod' -and (locationNumber -ne '85c' -and locationNumber -ne '42c')"
$users  = Get-ADUser -Filter $filter -Properties Title, locationNumber
Add-ADGroupMember -Identity "SDK test print convert" -Members $users

注意:属性locationNumber不是AD中的标准属性。这是您组织中的自定义属性还是您可能指的是DivisionEmployeeNumber之类的其他属性?

我在另一个地方提供了一个不同的答案,使用-Ldapfilter,但我觉得@Onyx在这里的答案可能更直观,如果你不太习惯的话。这是有效的,因为你只得到你需要的对象,而不是从AD中抓取每个帐户并扔掉其中的大部分。

老实说,如果你必须使用Where子句,执行-Filter 'title -like "*"'总比什么都不做要好。

对于第二个问题(如评论中所述),同样适用于可能构建LDAPfilter或@Onyx的方法,为您的customlocations创建数组,并通过这些创建Foreach

或者,至少在Where之前执行-Filter '(employeeType -ne "student") -and (CustomLocation -like "*")'

最新更新