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
以在您知道脚本正常工作时忽略这些错误。
此脚本现在可以正常运行,但问题是当在搜索库中找到多个组时,脚本会将所有组中的所有用户添加到跨林目标组中。
例如:
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
以在您知道脚本正常工作时忽略这些错误。