Exchange Onlineのコマンドでゲストユーザの属性を取得して結果をCSVファイルに出力する

はじめに

Exchange Onlineのコマンドでゲストユーザの属性を取得する機会があり取得に苦戦したので共有しようと思います。

Get-MailUserで属性情報を取得する

本ブログではコマンド「Get-MailUser」に焦点を当てています。
他のExchange Onlineコマンドにも応用はできるので参考にしてみてください。
Get-MailUserの詳細は以下マイクロソフトのページを参照してください。

Get-MailUser (ExchangePowerShell) | Microsoft Learn

今回やりたいことは次の2点です。

  1. Exchange Onlineコマンドから全ゲストユーザの指定した属性を取得したい
  2. 出力結果をCSVファイルに出力し、値が確認できるようにしたい

1.ユーザの属性情報を取得する

Get-MailUser -Identity <ExchangeObjectId> | FL

※Connect-ExchangeOnlineで接続済です。

FL

1ユーザの属性値を確認する場合は上記コマンドでも構いません。
ですが、ユーザ数が多い場合の属性値確認にはむいておらず、フィルターをかけての属性値の確認や各ユーザの属性値の比較にも不向きです。
そこで、CSVに出力した場合に目的の属性値やユーザを発見しやすいコマンドを、次の2~5の手順で解説します。

2.ゲストユーザでフィルターをかける

下記コマンドでゲストユーザにフィルターをかけ、ゲストユーザのみを出力します。

Get-MailUser -Filter "RecipientTypeDetails -eq 'GuestMailUser'"

フィルター結果

3.取得したい属性を指定する

以下コマンド取得したい属性のみを出力します。

Get-MailUser -Filter "RecipientTypeDetails -eq 'GuestMailUser'" | select UserPrincipalName,ExchangeObjectId,@{Name='EmailAddresses' ;Expression={$_.EmailAddresses}},@{Name='PrimarySmtpAddress' ;Expression={$_.PrimarySmtpAddress}},@{Name='ExternalEmailAddress' ;Expression={$_.ExternalEmailAddress}}

今回取得する値の一覧

  1. UserPrincipalName
  2. ExchangeObjectId
  3. EmailAddresses ※
  4. PrimarySmtpAddress ※
  5. ExternalEmailAddress ※

※上記のような指定方法を推奨します。

属性指定結果

4.出力結果が1000件以上ある場合に制限なく出力する

デフォルトではコマンド結果が1000件を超える場合は出力されません。
1000件以上出力結果がある場合の出力方法を記載しています。

以下コマンドでコマンド結果の出力数を無制限としています。

Get-MailUser -ResultSize unlimited -Filter "RecipientTypeDetails -eq 'GuestMailUser'" | select UserPrincipalName,ExchangeObjectId,@{Name='EmailAddresses' ;Expression={$_.EmailAddresses}},@{Name='PrimarySmtpAddress' ;Expression={$_.PrimarySmtpAddress}},@{Name='ExternalEmailAddress' ;Expression={$_.ExternalEmailAddress}}

1000件以上の出力

※注「-ResultSize unlimited」を指定した場合も以下画像のような警告が出力されます。
マイクロソフトに問い合わせしたところ警告は表示されるが出力に問題なく、制限なく出力されていると回答がありました。
また警告を表示させないように指定する機能は現在のところ実装はないとの回答でした。

警告

5.CSVファイルに出力する

以下コマンドでデスクトップCSVファイルが出力されるように指定します。

ファイル名 :$CSVOutPutFile="GetMailUser_Export.csv"
ファイルパス:$Desktop=[System.Environment]::GetFolderPath("Desktop")   

以下コマンドでCSVファイルに結果を出力します。

Get-MailUser -ResultSize unlimited -Filter "RecipientTypeDetails -eq 'GuestMailUser'" | select UserPrincipalName,ExchangeObjectId,@{Name='EmailAddresses' ;Expression={$_.EmailAddresses}},@{Name='PrimarySmtpAddress' ;Expression={$_.PrimarySmtpAddress}},@{Name='ExternalEmailAddress' ;Expression={$_.ExternalEmailAddress}} | Export-CSV -encoding UTF8 -NoTypeInformation $Desktop/$CSVOutPutFile

デスクトップにCSVファイルを出力

以下のように出力されます。
Excelでフィルターがかけやすく、ユーザ属性値の比較もしやすいです。

CSV出力

手順は以上です。

まとめ

今回はゲストユーザの属性出力とCSVファイル出力について記載しました。

執筆担当者プロフィール
持田 明日翔

持田 明日翔(日本ビジネスシステムズ株式会社)

モダンワークプレイス部所属。仮想基盤構築やミドルウェア導入などを経験し、現在はAzure認証周り業務に携わっております。このブログではAzure関連に関する記事を中心に執筆していければと思っています。趣味は登山です。

担当記事一覧