Microsoftサポートの問い合わせ実績を取得してみる

## はじめに
Azureをお使いの皆さん、Microsoftサポート（以下、MSサポート）をご利用でしょうか。技術サポートについては有償サービス（※）となりますが、Azureのサービス仕様に関する不明点や、Azure環境で発生したトラブルフォローなど、多岐にわたりサポートしてくれるとても優れたサービスです。私もAzure使い始めて6年ほどになりますが、これまで膨大なSR（Survice Request＝問い合わせ）を上げ、サポートの皆様には大変お世話になりました。

※サポートプランによってサービス内容や条件が異なります。

https://azure.microsoft.com/ja-jp/support/plans/


さて、MSサポートからの回答には、大量かつ様々な知見やノウハウが含まれているため、これを何かに有効活用したくなりますよね。本来であれば課題対応や問い合わせから得られた知見やノウハウは、TIPS集やWikiのような使える形で管理すべきですが、案件対応中だとそういった作業は後まわしになりがちです。

そこで、MSサポートとのこれまでのやり取りを後追いで一気に取得してうまく整理できないかな？と思って調べてみました。

## Az.Suppportモジュール
いつから登場したかは調べていませんが、現在は Az.Support というモジュールがあり、ここにサポートに関する操作を行うためのAPIが含まれています。Az.Support モジュールは、通常、私たちが Install-Module する”Az”には含まれていないため、別途、Az.Supportを Install-Module する必要があります。
また、CloudshellにもはすでにAz.Supportモジュールが入っていますので、ローカル環境にインストールするのが手間であれば、CloudShellからAPIを実行することも可能です。

Az.Supportモジュール自体のAPI数は大したことはありません。以下の8APIです。

https://docs.microsoft.com/en-us/powershell/module/az.support/?view=azps-8.0.0&viewFallbackFrom=azps-7.3.2#support

|#|API|説明|筆者補足| 
|---|---|---|---|
|1|Get-AzSupportProblemClassification|Get problem classifications for the service specified.|現在問い合わせ可能なカテゴリの中のサブカテゴリの一覧取得|
|2|Get-AzSupportService|Get services for which support is available.|現在問い合わせ可能なカテゴリ（サービス）の一覧取得|
|3|Get-AzSupportTicket|Get support tickets.|問い合わせチケット一覧の取得|
|4|Get-AzSupportTicketCommunication|Get support ticket communications.|問い合わせチケットの詳細情報の取得|
|5|New-AzSupportContactProfileObject|Creates a support contact profile object.|問い合わせプロファイルの作成（未検証）|
|6|New-AzSupportTicket|Creates a support ticket.|新規問い合わせチケットの作成（未検証）|
|7|New-AzSupportTicketCommunication|Creates a new support ticket communication.|問い合わせ中チケットの更新（未検証）
|8|Update-AzSupportTicket|Updates support ticket.|問い合わせ中チケットの属性変更？（未検証）|

#1,2については、現在問い合わせ可能なサービスとその詳細情報を取得することができます。
例えば、#2のAPIを実行すると、こんな感じで現在問い合わせ可能なAzureサービス一覧が取得できます。
![image2022-4-4_19-30-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/cd76db0a-4291-3433-8b22-94148238a71a.png)
さらにサブカテゴリを取得する場合は#1のAPIを使います。例えば「6f16735c-b0ae-b275-ad3a-03479cfa1396 Virtual Machine running Windows」のサブカテゴリを取得すると、こんな感じになります。
![image2022-4-4_19-33-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/e4a83ef5-2338-dc46-95ca-766145fd2b61.png)
これをGUIの問い合わせ画面と照らし合わせてみると、下記画面の「問題の種類」を取得しているイメージですね。
![image2022-4-4_19-36-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/d9fe8dd1-2358-91c7-1f91-b7df86e004af.png)

また、#5~8のAPIを使うことで、APIを使ってSR(問い合わせ)ができるようです。
ただ、今回はこのあたりの検証はできていないので割愛します。

## 過去の問い合わせ履歴を取得する

ここで使用するのは、下記２つのAPIです。

|#|API|説明|筆者補足| 
|---|---|---|---|
|3|Get-AzSupportTicket|Get support tickets.|問い合わせチケット一覧の取得|
|4|Get-AzSupportTicketCommunication|Get support ticket communications.|問い合わせチケットの詳細情報の取得|

まず、何も考えず「Get-AzSupportTicket」を実行してみます。
すると、過去の問い合わせチケットが全て出力できました。
（プロジェクト環境なので一部マスクしています。）
![image2022-4-4_19-50-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/576dc258-e683-46ec-5b4f-ea9c4e0ee9a9.png)
こちらの結果について、GUIで全ての問い合わせチケット一覧を取得した結果と、APIで取得した結果(の末尾)は一致しているので、取り漏れは無さそうした。ちなみに、APIで出力された方は日時(CreateDate)がデフォルトで「UTC」なのでご注意ください。

さて、問い合わせ一覧が取得できたところで、今度はチケットの内容の取得について取得していきます。
このサブスクリプション内のチケットの例として、下記のチケットを使っていきます。

**Name : 22012600600018XX**

まず、問い合わせ発行時の情報（問い合わせ本文も含め）は、引き続き「Get-AzSupportTicket」を使いますが、引数にNameの文字列をセットしてください。
![image2022-4-4_20-23-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/1d8d53d6-e1bd-c553-429e-d64685163853.png)
これだと分かりずらいので出力形式を変えてみます。実行結果にパイプしてFormat-Listを付けてみましょう。
すると、このAPIで出力される全属性が見えてきます。必要に応じてここから情報（問い合わせ本文であればDescription属性）を取得します。（マスクしていて分かりずらいですが、Description属性に問い合わせ本文ががっつり出力されています。）
![image2022-4-4_20-24-54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/aa29bce6-80ac-cbbe-c94d-3e855f074995.png)
続いて、問い合わせチケットにはMSサポートとのやり取りが残されています。これを取得するのが#4「Get-AzSupportTicketCommunication」です。引数「-SupportTicketName」にチケットのNameをセットしましょう。
![image2022-4-4_20-26-26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/f1f25728-a1a2-0e98-acec-76548131726e.png)
こんな感じでMSサポートとのやり取りの記録が取得できます。この一つ一つを取り出すには、さらに「-Name」引数で上記Nameカラムをセットします。出力には先ほどと同様にFormat-Listを付けておきます。
![image2022-4-4_20-36-35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/e55474df-8218-b4a8-b094-d46a5c3155c7.png)
すると、こんな感じでBody属性から回答内容を取得することができました。

あとはPowerShellの世界です！！foreachループなりFormatなりを駆使しして見やすい形で出力してください。

## おわりに

今回は、MSサポートの問い合わせ実績を取得する方法について紹介しました。Az.Support モジュールは思いの他素直に使えるものでした。皆様の参考になれば幸いです。それでは！