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

5anewei6  于 2023-01-09  发布在  Shell
关注(0)|答案(2)|浏览(135)
    • 此问题在此处已有答案**:

I am trying to add members to a AD group based on a value in the "title" attribute(3个答案)
19天前关闭。
我正尝试根据"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}
soat7uwm

soat7uwm1#

可以使用-in指定要与title属性进行比较的值列表
下面是一个例子:

$titles = "SECSCH", "SEC12", "LTOSEC", "LTO12"
Get-ADUser -Filter {title -in $titles} | ForEach-Object {
    Add-ADGroupMember "SDK test print color" $_.SamAccountName
}

在相同的策略中,您可以排除带有操作符注解的位置

$excludedLocations = "85c", "42c"
Get-ADUser -Filter {title -eq "custod" -and locationNumber -notin $excludedLocations} | ForEach-Object {
    Add-ADGroupMember "SDK test print convert" $_.SamAccountName
}
eblbsuwk

eblbsuwk2#

我使用一种过程方法将这种东西构建到LDAP过滤器中,我觉得这比大量-or语句更容易构造。

$titles = @'
SECSCH
LTOSEC
???12
'@ -split '\r?\n'

# begin filter
## (&(samAccountType=805306368) is not really needed for Get-Aduser
$filter = "(&(samAccountType=805306368)(|"
# append each title
$titles | Foreach { $filter += "(title=$_)"}
# end filter
$filter += "))"

# filter = (&(samAccountType=805306368)(|(title=SECSCH)(title=SEC12)(title=LTOSEC)(title=???12)))
Get-Aduser -ldapfilter $filter

注意,我在列表中插入了一个通配符。例如,它将捕获所有长度正好为5个字符、以“12”结尾的标题。在您的环境中可能会有类似的快捷方式。
如果使用通配符查询,但希望排除某些可能的结果,则始终可以添加NOT子句(确保它们位于AND子句内,而不是OR子句内!):
(&(samAccountType=805306368)(!title=SOP12)(|...
还请记住,-searchbase从特定的OU开始,如果这可能有助于您使用通配符,或者只是更好地确定用户集,减少所需的干扰/过滤。

相关问题