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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/67c8dbe8-ea7a-9ab1-0b5b-889207abea94.png)
PowerShellを使ってメッセージセンターにある情報を取得します。この投稿では取得することをゴールとしています。取得した情報の活用方法を思いついたら別途投稿します。

作成したPowerShellをGitHubにアップロードしました。

https://github.com/wataruf01/Microsoft365/blob/main/PowerShell/GetInformationFromMessageCenter/GetInformationFromMessageCenter.ps1

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

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Message Center の取得完了。<a href="https://twitter.com/hashtag/PowerAutomate?src=hash&amp;ref_src=twsrc%5Etfw">#PowerAutomate</a> で <a href="https://twitter.com/hashtag/MicrosoftGraph?src=hash&amp;ref_src=twsrc%5Etfw">#MicrosoftGraph</a> 使って Message Center 取得し、<a href="https://twitter.com/hashtag/SharePoint?src=hash&amp;ref_src=twsrc%5Etfw">#SharePoint</a> リストに格納<br>Teams に通知とアプリ化も考えよう <a href="https://t.co/zoub0Y3RFR">pic.twitter.com/zoub0Y3RFR</a></p>&mdash; ふらり@ROBO BOY (@flali_world) <a href="https://twitter.com/flali_world/status/1434648451820650499?ref_src=twsrc%5Etfw">September 5, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

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

https://qiita.com/wataruf01/items/2659fde24977007cc771#%E6%89%8B%E9%A0%861-azuread%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B

使用するアクセス許可は「委任のアクセス許可」-「Microsoft Graph」-「ServiceMessage.Read.All」です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/c0b496ae-6902-1f83-b98a-97098db59a06.png)

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

https://qiita.com/wataruf01/items/2659fde24977007cc771#%E6%89%8B%E9%A0%862-%E4%BD%9C%E6%A5%AD%E7%AB%AF%E6%9C%AB%E3%81%ABmsalps%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B

##手順3：スクリプトの実行

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

```powershell:メッセージセンターの情報を取得するスクリプト
#-------------------------------------------------
#変数の設定
#-------------------------------------------------
#テナントの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
```
#実行結果
グリッドビューにこのように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/ec316de1-a995-e355-a5b3-1c2348d55667.png)

#参考情報
メッセージセンターやサービス正常性の情報をAPIから取得するために以前は「Office 365 サービス通信 API」が使われていました。2021年9月現在は、同情報がGraph APIで提供されるようになりました。<font color="Red">「Office 365 サービス通信API」を使った情報提供は2021年12月17日で廃止になる</font>予定のようなので、今後はGraph APIを使って実装する必要があります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357828/2e7c212f-6f1d-a6f9-d191-8c546ff6e1a7.png)

https://docs.microsoft.com/ja-jp/office/office-365-management-api/office-365-service-communications-api-reference

以上です。