为来自不同域Powershell的多个成员添加ADGroupMember
我在添加来自不同域的多个用户时遇到问题:为来自不同域Powershell的多个成员添加ADGroupMember,powershell,Powershell,我在添加来自不同域的多个用户时遇到问题: $nazwa = 'test' $lista = Import-CSV "\test.csv" ForEach ($user in $lista) {Add-ADGroupMember -Identity $nazwa -Members $user.username} 我可以键入端口,但主目录中没有所有内容,因此我使用SAMAccountName从其他域获取用户: Get-ADUser -Server "test.pl:3
$nazwa = 'test'
$lista = Import-CSV "\test.csv"
ForEach ($user in $lista)
{Add-ADGroupMember -Identity $nazwa -Members $user.username}
我可以键入端口,但主目录中没有所有内容,因此我使用SAMAccountName从其他域获取用户:
Get-ADUser -Server "test.pl:3268" -LDAPFilter "(SAMAccountName=$User.username)"
如何使用此带端口的域来正确创建ForEach。或者我必须单独搜索每个域吗
我必须单独搜索每个域吗
是的-但是您不必为每个用户查询每个域
LDAP的筛选器语法支持|
(OR)子句,因此我们可以构造一个与任何相关用户名匹配的筛选器:
$filterClauses = $lista |ForEach-Object {
"(SAMAccountName=$($_.username))"
}
$ldapFilter = "(|$(-join $filterClauses))"
现在,$ldapFilter
字符串看起来像(|(SAMAccountName=username1)(SAMAccountName=username2)(…)
,我们可以对每个域执行一次查询:
$userTable = @{}
foreach($domain in 'domain1.fqdn','domain2.fqdn','domain3.fqdn'){
Get-ADUser -Server "$domain`:3268" -LDAPFilter $ldapFilter |ForEach-Object {
$userTable[$_.SAMAccountName] = $_
}
}
此时,我们可以将您的循环重写为:
foreach($user in $lista){
if($userTable.ContainsKey($user.username)){
Add-ADGroupMember -Identity $nazwa -Members $userTable[$user.username]
}
else {
Write-Warning "No user with username $($user.username) was found!"
}
}
我必须单独搜索每个域吗
是的-但是您不必为每个用户查询每个域
LDAP的筛选器语法支持|
(OR)子句,因此我们可以构造一个与任何相关用户名匹配的筛选器:
$filterClauses = $lista |ForEach-Object {
"(SAMAccountName=$($_.username))"
}
$ldapFilter = "(|$(-join $filterClauses))"
现在,$ldapFilter
字符串看起来像(|(SAMAccountName=username1)(SAMAccountName=username2)(…)
,我们可以对每个域执行一次查询:
$userTable = @{}
foreach($domain in 'domain1.fqdn','domain2.fqdn','domain3.fqdn'){
Get-ADUser -Server "$domain`:3268" -LDAPFilter $ldapFilter |ForEach-Object {
$userTable[$_.SAMAccountName] = $_
}
}
此时,我们可以将您的循环重写为:
foreach($user in $lista){
if($userTable.ContainsKey($user.username)){
Add-ADGroupMember -Identity $nazwa -Members $userTable[$user.username]
}
else {
Write-Warning "No user with username $($user.username) was found!"
}
}
您的列表中有多少个用户名?你可以构造一个LDAP过滤器来查找其中的任何一个,然后你只需查询每个域一次。大约50个用户名显示在你的列表中?你可以构造一个LDAP过滤器来查找其中的任何一个,然后你只需要查询每个域一次。大约50个,有时更少