Entra

GraphPowerShellを使用してアカウントの部署情報を一括更新する

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.com

Update-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-MgGraph

PowerShellのウィンドウは閉じずにエクスポートした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へお問い合わせください。
※いただきました内容は確認させていただきますが、必ずしも回答をお約束するものではございません。

    TeamsPowerShellを使用して全てチームのユーザー一覧を一括取得する前のページ

    関連記事

    1. Entra

      GraphPowerShellからユーザーを一括作成する

      Graph Powershellのコマンド、New-MgUserを使用…

    2. Entra

      Microsoft365アカウントの認証方法登録情報を取得する

      多要素認証、セルフパスワードリセットに使用する認証方法の登録…

    3. ドメインが複数表示されている画像

      Entra

      GraphPowerShellから独自ドメインのDNSレコードを一括取得する

      新規構築の場合は、複数のドメインを登録する必要がある場合があ…

    4. Entra

      GraphPowerShellを利用してMicrosoft365管理者アカウントを一括取得する

      GraphPowerShellを使用して管理アカウントを一括…

    最近の記事

    PAGE TOP