【问题标题】:Add-ADGroupMember for multiple members from different domains Powershell为来自不同域 Powershell 的多个成员添加 ADGroupMember
【发布时间】:2021-03-04 12:35:05
【问题描述】:

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

$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 过滤器来查找其中任何一个,然后您只需查询每个域一次。
  • 大约 50 个左右

标签: powershell


【解决方案1】:

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

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

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!"
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多