新しいドメインでの Microsoft 365 ユーザーアカウントの更新

ユーザーの電子メール アドレスとユーザー プリンシパル名の更新

最近の読者の質問では、組織が新しいバニティドメインを購入し、そのドメインを電子メールアドレスとユーザープリンシパル名(サインインアドレス)に使用する必要がある後に、多数のユーザーアカウントを更新する最良の方法について尋ねられました。これは、ビジネスがリブランディングの練習を経て、新しい名前で終わるときに時々起こります。電子メール アドレスとユーザー プリンシパル名を更新する要件は、テナント間の移行でも発生します。

テナント間の移行は、通常、この目的のために構築されたソフトウェアで管理される特殊な種類のアクティビティです。私たちは、これらのプロジェクトが遭遇する可能性のある課題に突入しません。代わりに、権限のある誰かが、すべてのアカウントで異なる電子メール アドレスとユーザー プリンシパル名を使用する必要があると決定するシナリオに焦点を当てます。

登録済みドメイン

最初の要件は、 Office 365 にドメインを追加する.これが行われるまで、ドメインを使用することはできません。ドメインがテナントに認識されると、Microsoft 365 管理センターに表示される検証済みドメインのセットに表示されます (図 1)。

Microsoft 365 テナント内の検証済みドメイン
図 1: Microsoft 365 テナント内の検証済みドメイン

Microsoft 365 のドメインを確認した後、使用するドメインを管理者に尋ねるコードを書くことができます。以下は、 Get-MgOrganization Microsoft Graph PowerShell SDK からコマンドレットを実行して、検証済みドメインを取得します。

Connect-MgGraph -Scopes Directory.Read.All, User.ReadWrite.All
Select-MgProfile Beta
# Get tenant information and the verified domains for the tenant
$TenantInfo = (Get-MgOrganization)
[array]$Domains = $TenantInfo.VerifiedDomains.Name
$DomainsList = $Domains -join ", "
Write-Host "Verified domains for this tenant:"
Write-Host "---------------------------------"
Write-Host ""
$Domains
Write-Host ""
$DomainToUse = Read-Host "What domain do you want to use for primary SMTP addresses and UPNs"
Write-Host ""
If ($DomainToUse -notin $Domains) {Write-Host ("The selected domain ({0}) is not in the set supported by the tenant ({1}). Please try again." -f $DomainToUse, $DomainsList); break }
$CompareDomain = "*" + $DomainToUse + "*"

メール受信者の検索

次の手順では、更新が必要な電子メール アドレスを持つメールが有効な受信者を見つけます。このコードは、ユーザー メールボックス、共有メールボックス、グループ メールボックス (Microsoft 365 グループの場合)、配布リスト、およびセキュリティが有効な配布リストを検索します。

このコードは、オブジェクトごとに、既存のドメインを新しいドメインと交換することによって、既存のアドレスに基づいて新しいプライマリ SMTP アドレスを計算します。チェックでは、新しいアドレスがまだ使用されていないことを確認し、使用されている場合は、 “を追加して新しいアドレスを作成します。EXO" をユーザー名に指定します。次に、このコードでは、ユーザー メールボックスと共有メールボックスで使用される Azure AD アカウントのユーザー プリンシパル名を更新する必要があるかどうかをチェックします。アカウントが既に新しいドメインを使用している可能性があるため、コードはアカウントの現在のユーザー プリンシパル名を確認し、必要に応じて新しいドメインで更新します。

出力は、CSV ファイルにエクスポートされる PowerShell リストにキャプチャされます。

[array]$Recipients = Get-Recipient -ResultSize Unlimited -RecipientTypeDetails UserMailbox, SharedMailbox, GroupMailbox, MailUniversalDistributionGroup, MailUniversalSecurityGroup, DynamicDistributionGroup

$i = 0
$Report = [System.Collections.Generic.List[Object]]::new()
ForEach ($R in $Recipients) {
     $i++
     If ($R.PrimarySmtpAddress.Split("@")[1] -ne $DomainToUse) { #Need to process this mailbox
      Write-Host ("Processing {0} {1} ({2}/{3})" -f $R.RecipientTypeDetails, $R.DisplayName, $i, $Recipients.Count)
      $NewUPN = $Null
      # Figure out new email address
      $NewAddress = $R.Alias + "@" + $DomainToUse
      # Check that the address is available
      $Status = Get-Recipient -Identity $NewAddress -ErrorAction SilentlyContinue
      # If we get a status the recipient address already exists, so create a new address
      If ($Status) { $NewAddress = $M.Alias + ".EXO@" + $DomainToUse }
      
      # Figure out if the account's user principal name needs to change
      If ($R.RecipientType -eq "SharedMailbox" -or $R.RecipientType -eq "UserMailbox") {
        $UPNDomain = $R.WindowsLiveId.Split("@")[1]
        If ($UPNDomain -ne $DomainToUse) { # New UPN needed
          $NewUPN = $R.WindowsLiveId.Split("@")[0] + "@" + $DomainToUse
          $Status = Get-MgUser -UserId $NewUPN -ErrorAction SilentlyContinue
          If ($Status) { # UPN already exists, so create a new one
            $NewUPN = $R.WindowsLiveId.Split("@")[0] + ".EXO@" + $DomainToUse }
          }
       }

      $ReportLine   = [PSCustomObject] @{ 
         DisplayName            = $R.DisplayName
         OldUPN                 = $R.WindowsLiveId
         NewUPN                 = $NewUPN
         PrimarySmtpAddress     = $R.PrimarySmtpAddress
         NewAddress             = $NewAddress
         Type                   = $R.RecipientTypeDetails
         Alias                  = $R.Alias
    }
    $Report.Add($ReportLine) }
}
$Report = $Report | Sort-Object Type
$Report | Export-CSV -NoTypeInformation c:\temp\MailObjects.Csv

管理者はCSVをチェックして、新しいメールアドレスを受信したくないメールが有効な受信者を削除できます(図2)。

Excel でのメールが有効なオブジェクトの編集
図2:Excelでのメールが有効なオブジェクトの編集

ユーザーのメールアドレスを新しいドメインで更新する

次のステップは、更新されたCSVファイルからオブジェクトの配列を読み込み、処理することです。

このコードでは、Switch ステートメントを使用してオブジェクトの種類を確認し、適切なコマンドレットを呼び出して新しいプライマリ SMTP アドレスをオブジェクトに割り当てます。メールボックスに使用されるアカウント (ユーザーまたは共有) でユーザー プリンシパル名の更新が必要な場合は、先に進んでそれを行います。

オブジェクトのループの最後の手順は、新旧の SMTP アドレスと新旧のユーザー プリンシパル名を書き留めて、完了したことを報告することです。

# Process mail objects array to update primary SMTP addresses and UPNs as necessary
[array]$MailObjects = Import-CSV MailObjects.CSV
$Report = [System.Collections.Generic.List[Object]]::new()

Write-Host "Processing mail-enabled objects..."
$i = 0
ForEach ($M in $MailObjects)  {
   $i++
   Write-Host ("Processing {0} {1} ({2}/{3})" -f $M.Type, $M.DisplayName, $i, $MailObjects.Count)

   # Assign new primary SMTP Address
   Switch ($M.Type) {
      "DynamicDistributionGroup" { # Dynamic distribution list
        Set-DynamicDistributionGroup -Identity $M.PrimarySmtpAddress -PrimarySmtpAddress $NewAddress
     }
      "GroupMailbox" { # Microsoft 365 group
        Set-UnifiedGroup -Identity $M.PrimarySmtpAddress -PrimarySmtpAddress $NewAddress
     }
      "MailUniversalDistributionGroup" { # Distribution list
        Set-DistributionGroup -Identity $M.PrimarySmtpAddress -PrimarySmtpAddress $NewAddress
     }
      "MailUniversalSecurityGroup" { #Mail-enabled security group
        Set-DistributionGroup -Identity $M.PrimarySmtpAddress -PrimarySmtpAddress $NewAddress
     }
      "SharedMailbox" { # Shared mailbox
        Set-Mailbox -Identity $M.PrimarySmtpAddress -WindowsEmailAddress $NewAddress 
     }
      "UserMailbox" { # User mailbox
        Set-Mailbox -Identity $M.PrimarySmtpAddress -WindowsEmailAddress $NewAddress 
     }
    }

   # Update UPN if necessary
   If ($M.NewUPN) {  
     Update-MgUser -UserId $M.UPN -UserPrincipalName $NewUPN }

   $ReportLine   = [PSCustomObject] @{ 
          DisplayName            = $M.DisplayName
          OldUPN                 = $M.UPN
          NewUPN                 = $NewUPN
          OldPrimarySmtpAddress  = $M.PrimarySmtpAddress
          NewPrimarySmtpAddress  = $NewAddress
          Type                   = $M.Type
          Alias                  = $M.Alias
    }
    $Report.Add($ReportLine) 

} # End ForEach 
Write-Host "All done!"

図 3 は、管理者が予期される電子メール アドレスとユーザー プリンシパル名が設定されていることを確認できるレポートの例を示しています。

新しいプライマリ SMTP アドレスといくつかの新しいユーザー プリンシパル名を持つ更新されたアカウント
図 3: 新しいプライマリ SMTP アドレスと新しいユーザー プリンシパル名を持つ更新されたアカウント

ユーザーの問題

更新されたユーザー プリンシパル名は、ユーザーが次回サインインしたときに有効になります。切り替えを強制する場合は、グラフを使用して更新トークンを無効にして、ユーザーを現在のセッションから切断できます。 revokeSignInSessions API.アクセストークンを無効にすると、ユーザーは再認証と再接続を余儀なくされ、そのためには新しいユーザープリンシパル名を使用する必要があります。

MFAの課題が機能するようにMicrosoft認証アプリで新しいユーザープリンシパル名を設定する必要があるなど、ユーザープリンシパル名を変更するときにいくつかの問題があることに注意してください それは価値があります このマイクロソフトの資料を読む を使用して、組織内でユーザーが遭遇する可能性のある問題を理解し、テストします。何が起こるかを知り、問題を解決する準備をすることで、よりスムーズな移行が保証されます。

人々のサインイン方法の変更は、それが明確に伝達されていない場合、いくつかの不安を引き起こす可能性がありますので、誰もがnderstandは、変更が起こっている理由と、サービスにアクセスするためにサインインするために何をする必要があるかを示しています。

Azure AD の整理

上記で概説したプロセスは、作業の大部分を処理します。電子メール アドレスを持たない一部の Azure AD アカウントで、更新されたユーザー プリンシパル名を受信する必要がある場合は、 更新 – 管理ユーザー Microsoft Graph PowerShell SDK のコマンドレット。

アカウントに新しいメールアドレスとユーザー プリンシパル名を与えることは、難しい技術的な課題ではありません。起こりうる問題は、準備とコミュニケーションで発生します。それはいつもそうではありませんか?


Microsoft 365 エコシステムの変化する世界に追いつくには、 IT プロフェッショナル向け Office 365 電子ブック。毎月の更新は、加入者が新しい開発についてその都度知ることを意味します。

未分類

Posted by admin