powershell 我正在尝试根据“title”属性中的值向AD组添加成员

sg2wtvxw  于 2023-01-26  发布在  Shell
关注(0)|答案(3)|浏览(138)

我正尝试根据“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}
zf9nrax1

zf9nrax11#

对于您的第一期,您可以创建一个包含您的标题的数组并浏览它。
示例:

$Titles = "SECSCH","SEC12","LTOSEC","LTO12"

foreach($Title in $Titles){
    Get-ADuser -filter {title -eq $Title} | %{Add-ADGroupMember "SDK test print color" $_.SamAccountName} 
}
xiozqbni

xiozqbni2#

-Members参数可以接受一个ADPrincipal对象数组,因此您可以在Filter中使用Where-Object子句,而不是使用这么多'OR。
这将允许您使用-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 = "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是AFAIK,而不是AD中的标准属性。它是您组织中的自定义属性,还是其他属性,如DivisionEmployeeNumber

ykejflvf

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 "*")'

相关问题