今回はユーザー名(UserPrincipalName:UPN)をPowershellのコマンドレットで変更する方法についてご紹介したいと思います。
また、複数のユーザーを一括で変更する場合はコマンドレットを使うことで可能です。
なお、UPNを変更した場合は、プライマリアドレスがUPNに指定した値に変更され、プライマリアドレスで利用していたアドレスは、エイリアス(セカンダリアドレス)に移動します。
そのため、送信時のアドレスが変わることをご注意ください。(受信はエイリアスに登録されるので引き続き可能です)
事前準備 : Windows PowerShell の起動と接続
下記公開情報の [1. Microsoft Graph PowerShell のインストール] を参考に、Microsoft Graph PowerShell 用モジュールのインストールをしてから実行してください。
※ すでに本モジュールのインストールが完了している場合、再インストールは不要ですので、後述の <Windows PowerShell への接続> の手順からご実施ください。
Windows PowerShell への接続
Microsoft Graph PowerShell 用モジュールのインストールが完了したら、以下の手順にて、Windows PowerShell へ接続してください。
1. Windows PowerShell を右クリックして [管理者として実行] で起動します。
2. 以下のコマンドレットを実行し、管理者ユーザーの ID とパスワードを入力します。
【コマンドレット】
Connect-MgGraph -Scopes "User.ReadWrite.All"
3. 以下のコマンドレットを実行し、モジュールをインポートします。
【コマンドレット】
Import-Module -Name Microsoft.Graph.Users
特定のユーザーのUPN の変更するには?
1. 以下のコマンドレットにて、 UPN を書き換えます。
【コマンドレット】
Update-MgUser -UserId <該当アカウントの現在の UPN> -UserPrincipalName <変更後の UPN>
【実行例】
Update-MgUser -UserId User01@contoso.com -UserPrincipalName User02@contoso.com
2. ユーザー情報を出力して確認します。
【コマンドレット】
Get-MgUser -UserId <変更後の UPN> -Property UserPrincipalName,DisplayName,Proxyaddresses| select UserPrincipalName,DisplayName,Proxyaddresses
【実行例】
Get-MgUser -UserId User02@contoso.com -Property UserPrincipalName,DisplayName,Proxyaddresses| select UserPrincipalName,DisplayName,Proxyaddresses
【出力例】
UserPrincipalName DisplayName ProxyAddresses
----------------- ----------- --------------
User02@contoso.com ユーザー {smtp:User01@contoso.com, SMTP:User02@contoso.com}
UserPrincipalName : UPN
DisplayName : 表示名
ProxyAddresses : アドレス
SMTP : プライマリ メールアドレス
複数ユーザーに対して一括でUPN の変更を実行するには?
1. 以下のフォーマットをもとに、対象ユーザーの CSV ファイルを作成します。
【フォーマット】
UserID,UserPrincipalName
<対象ユーザーの現在のユーザー ID>,<変更後の新しいユーザーID>
【作成例】
UserID,UserPrincipalName
user1@contoso.com,user2@contoso.com
user3@contoso.com,user4@contoso.com
【説明】
・ 対象ユーザーのユーザー名を記載した CSV ファイルを Excel やメモ帳などで作成し、CSV ファイル (拡張子 .csv) として保存します。
・ Excel で作成する場合は保存する際に [CSV UTF-8 (コンマ区切り)] 形式で保存してください。
・ エラー発生時のリスク回避のため、作成する 1 つの CSV ファイルでは、1000 ユーザー以内で作成し、コマンドレットを複数回に分けて実行することをお勧めします。
【参考情報】
以下のコマンドレットを実行することで、テナント内の全ユーザーのユーザー ID と表示名を CSV ファイルに出力することが可能です。
【コマンドレット】
Get-MgUser -All -Property UserPrincipalName,DisplayName | Select UserPrincipalName,DisplayName | Export-csv "<CSV ファイル名を含んだ出力先のパス>" -Encoding UTF8 -NoTypeInformation
【実行例】
Get-MgUser -All -Property UserPrincipalName,DisplayName | Select UserPrincipalName,DisplayName | Export-csv "C:\temp\UserList.csv" -Encoding UTF8 -NoTypeInformation
【説明】
・ 上記実行例では、全てのユーザーのユーザー名、表示名 をC ドライブ配下の temp フォルダに、ファイル名 UserList.csv として出力しています。
・ PowerShell のバージョン 7 以上をご利用の環境にて、出力した内容に文字化けが発生する場合 “-Encoding UTF8” の部分を “-Encoding utf8BOM” に変更し、文字化けが改善されるかご確認ください。
2. 以下のコマンドレットを実行し、複数ユーザーのユーザー ID を変更します。
【コマンドレット】
Import-Csv -Path "<CSV ファイル名を含む保存先のパス>" | ForEach-Object {Update-MgUser -UserId $_.UserId -UserPrincipalName $_.UserPrincipalName}
【実行例】
Import-Csv -Path "C:\temp\UserList.csv" | foreach-Object {Update-MgUser -UserId $_.UserId -UserPrincipalName $_.UserPrincipalName}
3. ユーザー情報を出力して確認します。
【コマンドレット 1】を実行し、続けて 【コマンドレット 2】を実行してください。
【コマンドレット 1】 ※ C ドライブ直下の temp フォルダに UserList.csv ファイルを保存している場合の例。
$temp=ForEach($i in Import-CSV "C:\temp\UserList.csv" | foreach {Get-MgUser -UserId $_.UserPrincipalName -property UserPrincipalName,DisplayName,Proxyaddresses}){Get-MgUserMemberOf -UserId $i.UserPrincipalName | Select @{n="UserPrincipalName";e={$i.UserPrincipalName}},@{n="displayName";e={$i.displayName}},@{n="Proxyaddresses}";e={$i.Proxyaddresses}}}
【コマンドレット 2】 ※ C ドライブ直下の temp フォルダに Users.csv ファイルとして出力する場合の例。
$temp | Export-Csv -Encoding UTF8BOM -NoTypeInformation -Path C:\temp\Users.csv
<出力結果>
UserPrincipalName : UPN
DisplayName : 表示名
ProxyAddresses : アドレス
SMTP : プライマリ メールアドレス