我在添加来自不同域的多个用户时遇到了问题:
$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。还是我必须分别搜索每个域名?
发布于 2021-03-04 13:20:23
,我必须分别搜索每个域名吗?
是的--但你不必为每个用户查询每个域。
LDAP的filter语法支持| (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!"
}
}https://stackoverflow.com/questions/66475158
复制相似问题