Microsoft365のアカウントのプロパティ情報を一括更新する方法について記載する。異動時期には役職、部署等の情報更新が必要。
全てのアカウントをエクスポートし一括更新し、運用工数の削減につなげたい。
検証環境について
動作確認した検証環境は以下の通り。
OS:Microsoft Windows 11 Enterprise
OSbuildバージョン:10.0.22621
PowerShellのバージョン:7.4.0
GraphPowershellのモジュール名とバージョン
Microsoft.Graph.Authentication 2.19.0
Microsoft.Graph.Users 2.19.0サインインアカウントの権限はグローバル管理者。
使用するコマンド
Get-MgUser
使用例
Get-MgUser -All取得できる情報例
DisplayName Id Mail
----------- -- ----
佐藤 太郎 10282bec-bf9f-1897-abbb-11988853a51b t.sato@*****.onmicrosoft.com
田中 次郎 10375a69-19b3-0311-825a-ae109a00d0df j.tanaka@*****.onmicrosoft.comUpdate-MgUser
使用例
Update-MgUser -UserId t.sato@*****.onmicrosoft.com -Department "総務部"全てのユーザーの現在の部署情報を取得する
#コマンド実行日時を取得する
$yyyyMMddFFFFF = Get-Date -Format "yyyyMMdd_FFFFF"
#CSVの保存先 windowsOSの場合、デスクトップに保存する
$csvSavePath = "$env:USERPROFILE\Desktop"
#保存するCSVのファイル名
$csvFileName = "allUserDepartmentInfoList_${yyyyMMddFFFFF}.csv"
#GraphPowerShellに接続する
Connect-MgGraph -Scopes User.Read.All -NoWelcome
#全てのユーザーの表示名、UPN、部署、勤務地、役職、従業員の種類の情報を取得する
#異動時に変更されそうなプロパティを列挙した
$allUserList = Get-MgUser -All `
-Property DisplayName,UserPrincipalName,Department | `
Select-Object DisplayName,UserPrincipalName,Department
#取得したアカウント情報を、部署・UPNで並び替えしたのち、CSVファイルとしてエクスポートする
$allUserList | Sort-Object @{Expression = 'Department'; Descending = $true },UserPrincipalName | `
Export-Csv -Encoding utf8 `
-NoTypeInformation `
-Path "${csvSavePath}\${csvFileName}"
#GraphPowerShellから切断する
Disconnect-MgGraphPowerShellのウィンドウは閉じずにエクスポートしたCSVファイルを編集すること。
CSVファイル編集編集後、残ったPowerShellウィンドウに以下スクリプトをそのままコピペすること。
万が一、PowerShellのウィンドウを閉じてしまった場合は、Import-Csvのコマンド実行時に指定するPATHに
ファイルの保存先を手動入力すること。
部署情報を更新する
#進捗状況管理の変数
$count = 0
#GraphPowerShellに接続する
Connect-MgGraph -Scopes User.ManageIdentities.All -NoWelcome
#CSVファイルを読み込む
$accountInfoList = Import-Csv -Path "${csvSavePath}\${csvFileName}" -Encoding utf8
#CSVファイルのアカウント数だけ繰り返す
foreach($accountInfo in $accountInfoList){
$count = $count + 1
#進捗状況を小数点以下2桁で表示するようにフォーマットする
$Completed = [Math]::Round(($count / $accountInfoList.Count) * 100,2)
#進捗状況を表示させるコマンド
Write-Progress -Activity "$Completed%完了" -PercentComplete $Completed
#現在の部署情報を取得する
$nowDept = (Get-MgUser -UserId $accountInfo.UserPrincipalName -Property Department).Department
#現在の部署情報をCSVファイルの部署情報が違う場合は情報を更新する
if($nowDept -ne $accountInfo.Department){
Update-MgUser -UserId $accountInfo.UserPrincipalName -Department $accountInfo.Department
}
}
Disconnect-MgGraph問い合わせフォーム
リンク切れのご報告や、記載内容に不備がありましたら、お手数をおかけしますが
以下お問い合わせフォームからご報告をお願い致します。
コマンドの仕様確認やエラー内容の確認、対処方法については、ご契約されているMicrosoftかCSPへお問い合わせください。
※いただきました内容は確認させていただきますが、必ずしも回答をお約束するものではございません。







