我正试图根据"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中的标准属性。这是您组织中的自定义属性还是您可能指的是Division
或EmployeeNumber
之类的其他属性?
我在另一个地方提供了一个不同的答案,使用-Ldapfilter
,但我觉得@Onyx在这里的答案可能更直观,如果你不太习惯的话。这是有效的,因为你只得到你需要的对象,而不是从AD中抓取每个帐户并扔掉其中的大部分。
老实说,如果你必须使用Where
子句,执行-Filter 'title -like "*"'
总比什么都不做要好。
对于第二个问题(如评论中所述),同样适用于可能构建LDAPfilter或@Onyx的方法,为您的customlocations
创建数组,并通过这些创建Foreach
。
或者,至少在Where
之前执行-Filter '(employeeType -ne "student") -and (CustomLocation -like "*")'
。