ルドルフもわたるふもいろいろあってな

Microsoft 365、Power Platform、PowerShellについて調べたことや検証したことなどを投稿します。技術の話は面白い。

Microsoft365管理センターのメッセージセンターにある情報をPowerShellを使って取得する

f:id:wataruf01:20220322000305p:plain
PowerShellを使ってメッセージセンターにある情報を取得します。この投稿では取得することをゴールとしています。取得した情報の活用方法を思いついたら別途投稿します。

作成したPowerShellGitHubにアップロードしました。
github.com

作成したきっかけ

Twitterでふらりさんの素敵な投稿を見かけたからです。これを見て、仕組みを読み解くところからやってみたいと思いました。

使いかた

手順1: AzureADアプリを登録する

このスクリプトは「委任のアクセス許可」を使っています。
「委任のアクセス許可」を使ったAzureADアプリの登録手順については下記投稿を参照してください。
qiita.com


使用するアクセス許可は「委任のアクセス許可」-「Microsoft Graph」-「ServiceMessage.Read.All」です。
f:id:wataruf01:20220322000454p:plain

手順2: 作業端末に「MSAL.PS」モジュールをインストールする

「委任のアクセス許可」を簡単に使うためにモジュールをインストールします。こちらについても手順1と同じ投稿に記載していますので参照してください。
qiita.com

手順3:スクリプトの実行

以下のスクリプトを実行してください。グリッドビューがポップアップ開いて取得結果が表示されます。「変数の設定」に記載している各IDは手順1で取得したIDに置き換えてください。

メッセージセンターの情報を取得するスクリプト

#-------------------------------------------------
#変数の設定
#-------------------------------------------------
#テナントのID
$tenantID = "XXX-XXX-XXX-XXX-XXX"

#AzureADアプリ
$clientID = "XXX-XXX-XXX-XXX-XXX"

#MSALのリダイレクトURL
$MSALRedirectUri = "msalXXX-XXX-XXX-XXX-XXX://auth"

#-------------------------------------------------
#認証情報を取得
#------------------------------------------------- 
#トークンを取得
$token = Get-MsalToken `
-TenantId    $tenantID `
-ClientId    $clientID `
-RedirectUri $MSALRedirectUri `
-Interactive 

$headerParams = @{
    'Authorization' = "bearer $($token.AccessToken)"
}

#-------------------------------------------------
#メッセージセンターの情報を取得
#------------------------------------------------- 
$url = "https://graph.microsoft.com/v1.0/admin/serviceAnnouncement/messages"
$contentType = "application/json"

$responseFromAPI = Invoke-RestMethod `
-Method  GET `
-uri     $url `
-Headers $headerParams `
-ContentType $contentType

$result = @()
$result += $responseFromAPI.value

$pages = $responseFromAPI.'@odata.nextLink'

while([string]::IsNullOrEmpty($pages) -eq $false)
{
    $addtional = Invoke-RestMethod `
    -Method  GET `
    -uri     $pages `
    -Headers $headerParams `
    -ContentType $contentType

    $result += $addtional.value

    $pages = $addtional."@odata.nextLink"
}

$result | Out-GridView

実行結果

グリッドビューにこのように表示されます。
f:id:wataruf01:20220322000544p:plain

参考情報

メッセージセンターやサービス正常性の情報をAPIから取得するために以前は「Office 365 サービス通信 API」が使われていました。2022年3月現在は、同情報がGraph APIで提供されるようになりました。「Office 365 サービス通信API」を使った情報提供は2021年12月17日で廃止になりましたので、今後はGraph APIを使って実装する必要があります。
f:id:wataruf01:20220322000615p:plain

Office 365 サービス通信 API リファレンス
docs.microsoft.com

以上です。