📑

コマンドを使ってMicrosft365のアドレス帳を取得する

2024/06/12に公開

これはなに?

Powershellの Get-AzureADUserを使ってMicrosft365のアドレス帳を取得する方法です。

概要

Microsft365のアドレス帳の内容はAzureADの登録ユーザ一覧と同じなので、AzureADのユーザ一覧を取得します。

モジュールのインストール

WindowsパソコンにAzureADをインストールします。

Install-Module -Name AzureAD

コマンド実行

AzureADをインポートしてConnect-AzureADコマンドでM365に接続します。

Import-Module AzureAD
Connect-AzureAD 

コマンドを実行すると自動的にウェブブラウザが起動して、Windowsログイン中のユーザで認証が行われます。

実際にユーザ一覧を取得してみます。

Get-AzureADUser -All $false

AzureADに登録されているユーザが一覧で表示されたはずです。

フィルターしよう

Get-AzureADUserを実行すると大量のユーザが表示されます。
最終的にはWhere-Objectを使ってフィルタしますがGet-AzureADUserの段階である程度フィルタしておくと動作が早いです。

フィルター例

AzureADには一般ユーザだけでなくメーリングリストやゲストユーザ、通知用メールアドレスなど様々なアドレスが登録されています。
今回は一般ユーザかつ指定部署のユーザを抽出したいため下記のフィルターを適用します。

Get-AzureADUser -All $true  -Filter "userType eq 'Member' and startswith(department,'部署名')"

フィルタした結果からさらにWhere-Objectでフィルタし、必要な項目をSelect-Objectで抽出します。

Get-AzureADUser -All $true  -Filter "userType eq 'Member' and startswith(department,'部署名')" |
  Where-Object { $_.jobTitle -notmatch "アラート通知用" } |
  Select-Object mail,DisplayName,Department
  • jobTitleに "アラート通知用"と入っているアカウントを除外
  • mail,DisplayName,Department項目を取得

フィルターに使えるクエリ

Get-AzureADUser-Filter特定の項目についてのみeqなどでフィルタできます。
どの項目がフィルタできるかは次のURLに掲載されています。
https://learn.microsoft.com/en-us/graph/aad-advanced-queries?view=graph-rest-1.0&tabs=http

参考URL

フィルターの例
https://www.easy365manager.com/get-azureaduser-filter-example/

おまけスクリプト

Get-AzureADUserで取得したアドレス一覧を元にちょっと加工したCSVを出力するサンプルです。

Get-AzureADUser <色々フィルタ> | ForEach-Object {
    # DisplayNameにスペース区切りで本名が入っているのでsplitしつつ変数に入れる
    $firstName,$lastName,$null,$null = $_.DisplayName -split ' '

    # メールアドレスはそのまま
    $mail = $_.mail

    # 新しいオブジェクトを作成してパイプラインに渡す
    [PSCustomObject]@{
        firstName = $firstName
        lastName = $lastName
        email = $mail
    }
} | Export-Csv -Path "output.csv" -NoTypeInformation -Encoding UTF8

Discussion