首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为来自不同域的多个成员添加-ADGroupMember

为来自不同域的多个成员添加-ADGroupMember
EN

Stack Overflow用户
提问于 2021-03-04 12:35:05
回答 1查看 127关注 0票数 0

我在添加来自不同域的多个用户时遇到了问题:

代码语言:javascript
复制
$nazwa = 'test'
$lista = Import-CSV "\test.csv"
ForEach ($user in $lista)
{Add-ADGroupMember -Identity $nazwa -Members $user.username}

我可以输入端口,但是主目录中没有所有内容,所以我使用SAMAccountName从其他域获取用户:

代码语言:javascript
复制
Get-ADUser -Server "test.pl:3268" -LDAPFilter "(SAMAccountName=$User.username)"

如何使用带端口的域来正确地生成ForEach。还是我必须分别搜索每个域名?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-04 13:20:23

,我必须分别搜索每个域名吗?

是的--但你不必为每个用户查询每个域。

LDAP的filter语法支持| (OR)子句,因此我们可以构造一个筛选器,它将匹配任何相关的用户名:

代码语言:javascript
复制
$filterClauses = $lista |ForEach-Object {
  "(SAMAccountName=$($_.username))"
}
$ldapFilter = "(|$(-join $filterClauses))"

现在,$ldapFilter字符串看起来像(|(SAMAccountName=username1)(SAMAccountName=username2)(...)),我们可以对每个域执行一个查询:

代码语言:javascript
复制
$userTable = @{}

foreach($domain in 'domain1.fqdn','domain2.fqdn','domain3.fqdn'){
    Get-ADUser -Server "$domain`:3268" -LDAPFilter $ldapFilter |ForEach-Object {
        $userTable[$_.SAMAccountName] = $_
    }
}

此时,我们可以将您的循环重写为:

代码语言:javascript
复制
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!"
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66475158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档