[英]How can I copy AzureAD user groups with PowerShell for matching accounts?
我对PowerShell
不是超级先进,但这是我必须编写的最复杂的脚本。
我是一家公司的新手,我们正在将一家子公司从使用主要公司域名的账户迁移到使用子公司域名的账户。 例如,John Smith 将同时拥有jsmith@maincompany.com
帐户和john.smith@subsidiary.com
帐户。
自然,这些帐户属于不同的 O365 组。 我想做的是:
从子域中获取所有帐户,以便我知道我要复制给谁
获取他们主要公司域的匹配帐户,以便我知道我从哪里复制
从每个主要公司帐户中获取所有组
复制每个相应帐户的组成员身份
我认为一系列foreach
循环是最好的方法,但我主要担心的是我不想将每个人的组复制到其他人。
Connect-AzureAD
$subsidiaryEmails = Get-AzureADUser -all $true | where { $_.UserPrincipalName.EndsWith("subsidiary.com") }
$mainEmails = foreach ($subsidiaryEmail in $subsidiaryEmails) {Get-AzureADUser -SearchString $subsidiaryEmail.DisplayName | where-object {$_.UserPrincipalName -like "*@maincompany.com"}}
$mainGroupMembership = foreach ($mainEmail in $mainEmails) {Get-AzureADUserMembership -ObjectId $mainEmail.objectId}
foreach ($group in $mainGroupMembership) {Add-AzureADGroupMember -ObjectId $group.ObjectId -RefObjectId $subsidiaryEmail.ObjectId}
它超级丑陋,可能无法正常工作,但我觉得我已经把正确的部分拼凑在一起,但不知道如何将拼图拼凑在一起。
我觉得嵌套的foreach
是最好的选择,但我对它们的了解还不够,无法对此充满信心。
我相信你认为使用多个嵌套的 foreach 是超级难看的。
首先,理想的逻辑应该是这样的:
$subsidiaryEmails = Get-AzureADUser -all $true | where { $_.UserPrincipalName.EndsWith("subsidiary.com") }
foreach ($subsidiaryEmail in $subsidiaryEmails)
{
$mainEmails = Get-AzureADUser -SearchString $subsidiaryEmail.DisplayName | where-object {$_.UserPrincipalName -like "*@maincompany.com"}
foreach ($mainEmail in $mainEmails)
{
$mainGroupMembership = Get-AzureADUserMembership -ObjectId $mainEmail.objectId
foreach ($group in $mainGroupMembership)
{
Add-AzureADGroupMember -ObjectId $group.ObjectId -RefObjectId $subsidiaryEmail.ObjectId
}
}
}
我们可以避免这样的一些 foreach :
$subsidiaryEmails = Get-AzureADUser -all $true | where { $_.UserPrincipalName.EndsWith("subsidiary.com") }
foreach ($subsidiaryEmail in $subsidiaryEmails)
{
Get-AzureADUser -SearchString $subsidiaryEmail.DisplayName | where-object {$_.UserPrincipalName -like "*@maincompany.com"} | Get-AzureADUserMembership | select-object -property @{N='RefObjectId';E={$subsidiaryEmail.ObjectId }},@{N='ObjectId';E={$_.ObjectId }} | Add-AzureADGroupMember
}
此脚本不考虑您是否有多个(两个以上)具有相同DisplayName的帐户,以及您的子域帐户是否可能已存在于目标组中。 请根据您的实际情况进行修改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.