PowershellでActiveDirectoryユーザーのUPNプレフィックス、サフィックスを一括変更する方法
こんにちは!
前回の記事でHybridAzureADJoinedの設定について記載しました。
※詳しい前提内容は以下の記事を参照ください。ここから記載する内容は前回記載のUPNサフィックスの追加が完了している前提で記載します。
その中ではActiveDirectory(AD)ユーザーのUPNプレフィックス、サフィックスを変更する必要があるパターン(UserA@test.co.jpであればUserAがプレフィックス、test.co.jpがサフィックス!)だったのですが、1ユーザーずつ手動変更するのはめっちゃ大変・・・・・・
こんな時、利用するのはやっぱり「Powershell」!!
ってことで今回はPowershellを使って、ADユーザーのUPNプレフィックス、サフィックスを変更する方法を記載します。
- 変更の前提
- ActiveDirectoryサーバにてPowershellが利用可能な環境である
- ユーザー情報を[UserA@test.local]から[TestUserA@test.co.jp]に変更する
- PowershellでのADユーザー情報変更
今回利用するコマンドレットは以下のコマンドレットです。
Set-ADUser
ユーザーのプレフィックス、サフィックスを変更するのでこんな書き方です。
Get-ADUser -SearchBase "CN=Users,DC=test,DC=Local" -Filter {UserPrincipalname -eq "UserA@test.local"} | Set-ADUser -UserPrincipalName "TestUserA@test.co.jp"
「-SearchBase」は設定変更するユーザーの検索先OUもしくはCNを指定します。
例では[test.local]内のUsersコンテナ配下を検索するように記載しています。
※例えば下図の「Office365内のUsers」を指定したい場合は「OU=Users,OU=Office365,DC=test,DC=Local」となります。
今回も!複数ユーザーに一斉にこれを実施したいので!!
まずはcsvデータを作成します。
UserData.csvという名前で作成しています。
1行目のAセルに「CurrentUser」、1行目のBセルに「NewUPN」を記載します。
これがヘッダー情報です!
2行目以降に変更したいADユーザーの情報を記載していきます。
「CurrentUser」の列に現在の「UserPrincipalName」、
「NewUPN」の列に変更後の「UserPrincipalName」を記載していきます。
作成したCSVファイルをPowershellを実行するADサーバーの以下のフォルダに配置します。
「C:\temp」
以下のスクリプトを作成します。
#ソースデータファイルのパス指定 $Datapath = "C:\temp\UserData.csv" #検索対象OU指定 $Searchtarget = "CN=Users,DC=test,DC=Local" #データファイルのインポート(Shift-JIS) $Datas = Import-Csv -Path $Datapath -Encoding Default #データファイルの行数分ループ foreach($Data in $Datas){ $Command = 'Get-ADUser -SearchBase $Searchtarget -Filter {UserPrincipalname -eq "' +$Data.CurrentUser + '"} | Set-ADUser -UserPrincipalName ' + $Data.NewUPN Invoke-Expression $Command }
2行目の「$Datapath = "C:\temp\UserData.csv"」で読み込むCSVファイルのパスを指定しているのでパスやファイル名を変更した場合はここを修正します。
5行目の「$Searchtarget = "CN=Users,DC=test,DC=Local"」で変更対象のADユーザーの検索場所を指定しています。上記記載の「-SearchBase」を指定する方法です。
ADユーザーの格納場所をしてしてください。
スクリプトを実行するとCSVに記載のADユーザーのUPNが変更されます。
※変更後のUPNサフィックスがADサーバーに追加されていないとできないので注意してください。
方法は上記過去記事に記載してあります。
今回もforeachを使用して繰り返し処理を記載しています。(正確にはForeach-Objectですね!笑)
とても便利なのでぜひ使ってみてくださいね!
そのうちForeach-Objectの使い方も書こうかなあ。。。単純すぎていらないか・・・笑
- 最後に!
Twitterでも情報発信したいと思いますので、興味があったらフォローしてください!