Powershell 将组内的用户添加到跨林组

Powershell Adding users within groups to cross forest groups

此脚本现在可以正常运行,但问题是当在搜索库中找到多个组时,脚本会将所有组中的所有用户添加到跨林目标组中。

例如:

ForestAGroup1 = 包含 2 个用户

ForestAGroup2 = 包含 2 个用户

::运行脚本::

现在...

ForestBGroup1 = 包含 4 个用户

ForestBGroup2 = 包含 4 个用户

ForestBGroup1/2 需要包含与 ForestAGroup1/2 相同的用户。

参考脚本如下:

    $creds = Get-Credential
$Groups = Get-ADGroup -Properties * -Filter * -SearchBase "OU=TEST,OU=Shop Print Groups,OU=User,OU=domain Groups,DC=domainA,DC=com" | export-csv c:\temp\test.csv
$Groups = Get-ADGroup -Properties * -Filter * -SearchBase "OU=TEST,OU=Shop Print Groups,OU=User,OU=domain Groups,DC=domainA,DC=com"
Foreach($G In $Groups)
{
    #Display group members and group name
    Write-Host $G.Name
    Write-Host "-------------"
    $G.Members

    #Add members to domainB group
    $domainGMembers = import-csv C:\temp\test.csv | ForEach-Object -Process {Get-ADGroupMember -Identity $_.CN} | Select-Object samaccountname | export-csv c:\temp\gmembers.csv

    $domainDNUser = import-csv C:\temp\gmembers.csv | ForEach-Object -Process {Get-ADUser $_.samaccountname -Server "domainA.com" -properties:Distinguishedname}

    import-csv C:\temp\gmembers.csv | ForEach-Object -Process {Add-ADGroupMember -Server "domainB.com" -Identity $G.Name -Members $domainDNUser -Credential $creds -Verbose}

}

你在做什么?

  • 您导出为 csv,但仍尝试将其保存到变量
  • 你搜索了两次
  • 您将 TEST-OU 中所有组的所有成员添加到 domainB
  • 中的每个组
  • 您将时间浪费在保存和读取内存中已有的数据上
  • 当您已经拥有好十倍的 DN 时,您搜索用户对象以获得 SamAccountName。然后你使用 SamAccountName 找到 DN.

试试这个(未测试):

$creds = Get-Credential
$Groups = Get-ADGroup -Properties Members -Filter * -SearchBase "OU=TEST,OU=Shop Print Groups,OU=User,OU=domain Groups,DC=domain,DC=com"
Foreach($G In $Groups)
{
    #Display group members and group name
    Write-Host $G.Name
    Write-Host "-------------"
    $G.Members

    #Add members to domainB group
    $G.Members |
    Get-ADUser -Server fairfieldmfg.com |
    ForEach-Object { Add-ADGroupMember -Server "domainB.com" -Identity $G.Name -Members $_ -Credential $creds -Verbose }
}

我对 运行 Add-ADGroupMember 使用了一个 foreach 循环,因为如果它发现已经是一个成员,它通常会在一组成员中间失败,但是如果我们添加它们一次解决一个问题(或者您可以搜索并排除组中已有的人)。

您可能希望将 -ErrorAction SilentlyContinue 添加到 Add-ADGroupMember 以在您知道脚本正常工作时忽略这些错误。