我正尝试根据“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}
此外,对于另一组我想所有的“custod”在标题中,除了在位置“85c”和“42c”下面是我在哪里。
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}
3条答案
按热度按时间zf9nrax11#
对于您的第一期,您可以创建一个包含您的标题的数组并浏览它。
示例:
xiozqbni2#
-Members
参数可以接受一个ADPrincipal对象数组,因此您可以在Filter中使用Where-Object
子句,而不是使用这么多'OR。这将允许您使用
-contains
或-match
等运算符至于你的第二个代码改变过滤器如下
注意:属性
locationNumber
是AFAIK,而不是AD中的标准属性。它是您组织中的自定义属性,还是其他属性,如Division
或EmployeeNumber
?ykejflvf3#
我使用
-Ldapfilter
提供了与other place it was asked上的第一个问题不同的答案,但我觉得如果您对此不太满意,@Onyx的答案可能更直观。它的效率在于您只获得所需的对象,而不是从AD中获取 * 每个帐户 * 并丢弃其中的大部分。老实说,如果必须使用
Where
子句,那么做-Filter 'title -like "*"'
总比什么都不做好。对于第二个问题(如评论中所述),同样的问题也适用于构建一个LDAP过滤器或@Onyx的方法,为您的
customlocations
创建一个数组,并通过这些方法执行Foreach
。或者,至少在
Where
之前执行-Filter '(employeeType -ne "student") -and (CustomLocation -like "*")'
。