Intuneで検出されたアプリのPower BIの可視化

# 2022/4/3 追記
　方法2のGraph APIで取得するレポート名を
　**Discovered**AppsRawData
 　↓
　**Detected**AppsRawData
とすると、方法1のMEMでエクスポートするのと同じ全件が取れることがわかりました。
（Docsには記載がないですが）
適時使い分けができそうです。

# はじめに

　2020/3/27の[Power BI Weekly News 17 - YouTube](https://www.youtube.com/watch?v=bNi-rzvVRz0&t=1621s)で、デバイス管理等を行うIntuneで検出された各デバイスのアプリについて、 [Intenue データウェアハウス](https://docs.microsoft.com/ja-jp/mem/intune/developer/reports-nav-create-intune-reports?WT.mc_id=DP-MVP-5004418)をデータソースにしてPower BIで可視化することを小ネタにしました。
　しかし、その後 @spumoni さんの調べ（[OData #3 Intune データ ウェアハウスでデバイス管理のためのレポートを作成する - Qiita](https://qiita.com/spumoni/items/9a90c33dfd7d16e84b4d?utm_campaign=post_article&utm_medium=twitter&utm_source=twitter_share)）によると、検出されたアプリがあるテーブル「applicationInventory」は、2022年2月に廃止された!　とのことでした。

https://docs.microsoft.com/ja-jp/mem/intune/developer/reports-changelog?WT.mc_id=DP-MVP-5004418

試しに可視化しましたが、やはり2022/2/6で更新が止まっています。

https://ishiayaya.net/IntuneDW-Apps-old
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/e318ca1b-cdb4-ee82-0ee4-06ec7ea3bb86.png)

これを機会に代替手段について調べました。

## 調べたこと

上記のDocs（[Intune データ ウェアハウスの変更ログ - Microsoft Intune | Microsoft Docs](https://docs.microsoft.com/ja-jp/mem/intune/developer/reports-changelog?WT.mc_id=DP-MVP-5004418)）によると、

> 関連情報については、「Graph API を使用して Intune レポートをエクスポートする」を参照してください。

とあります。以下がそれです。

https://docs.microsoft.com/ja-jp/mem/intune/fundamentals/reports-export-graph-apis?WT.mc_id=DP-MVP-5004418

こちらはMicrosoft GraphのAPIを使って特定のレポートをCSVで取得する方法です。どのようなレポートが取れるかは以下にあります。

https://docs.microsoft.com/ja-jp/mem/intune/fundamentals/reports-export-graph-available-reports?WT.mc_id=DP-MVP-5004418

この中の

> DiscoveredAppsRawData

こちらが検出されたアプリを取得するもので、

Microsoft Endpoint Manager (以下、MEM）でいうと、

> Under Apps > Monitor > Discoverd apps > Export 
> アプリ > モニター > 検出されたアプリ > エクスポート

で取れるとあります。

なるほど！ 

MEMのこの画面では、デバイス数のカウントがでているだけ。アプリ名をクリックしてドリルダウンすることで、対象デバイスを特定することでやっと取得できる... なので面倒だぁなと思っていました。このエクスポートだったら明細で取れるんですね。

いろいろな方法があるものだなぁ。と少し感心しました。

そして実際にやってみると、MEMの画面表示の件数、MEMのエクスポート、Microsoft Graph API、それぞれ出力内容や件数が違うとわかりましたw

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/31c798df-6671-5c8c-44b1-86633f3bb880.png)

こちらが、MEMの画面表示で、他と比べると以下の結果です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/870a241d-b5aa-4caf-6b09-b363dfbbc17f.png)

では、CSVで取得できる2つの方法と結果等について説明します。

## 方法1：MEMのエクスポート

　デバイス毎に入っているアプリをMEMで確認するには、

> デバイス >すべてのデバイス >  [調べたいデバイス名] > 検出されたアプリ

といった手順で行います。上記の手順をデバイスまとめて一括してアプリを取得するのがこちらです。

> Under Apps > Monitor > Discoverd apps > Export 
> アプリ > モニター > 検出されたアプリ > エクスポート

明細と取得するので生データを選択ですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/dad2062d-dadb-dd02-a925-9ff06f320873.png)

**Detected**AppsAggregate xxxx というファイル名のzipの中にCSVファイルが入っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/01da2525-7289-15ac-0d17-93c07e4ddc22.png)

CSVにはアプリの情報に加えて、DeviceIDやユーザー名等も取得でき全部入り感です。

最終的なPower BIレポートは[こちら https://ishiayaya.net/Intue-Apps](https://ishiayaya.net/Intue-Apps)です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/3a552733-3179-cde4-8b06-6ca6731234bf.png)

## 方法2：Graph APIによるIntuneレポート取得

[Graph エクスプローラー - Microsoft Graph](https://developer.microsoft.com/ja-jp/graph/graph-explorer)を利用します。

https://docs.microsoft.com/ja-jp/mem/intune/fundamentals/reports-export-graph-apis?WT.mc_id=DP-MVP-5004418

にあるhttpリクエストを使います。

```
https://graph.microsoft.com/beta/deviceManagement/reports/exportJobs
```

https://docs.microsoft.com/ja-jp/mem/intune/fundamentals/reports-export-graph-available-reports?WT.mc_id=DP-MVP-5004418

の中から

> DiscoveredAppsRawData

を要求本文のJSONで、reportNameに入れてPOSTします。

```csharp
{
    "reportName": "DiscoveredAppsRawData"
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/77b80ea1-fbd6-1803-ac42-550bfd985227.png)

応答結果の中で、IDをコピーし、次のGETリクエストで使います。

```
https://graph.microsoft.com/beta/deviceManagement/reports/exportJobs('[ここにIDを挿入]')
```

1回目は進行中になるかもです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/d71d97fa-e9cc-243a-9e91-f7b906e09fea.png)

もう一度実行すると、ユニークなZipダウンロードのURLが発行されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/4bd27ea9-bbe8-3e29-cd19-f866ff40609c.png)

こちらの**Discovered**AppsAggregate xxxx というファイル名のzipの中にCSVファイルが入っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/2dc5147a-35dd-584a-5ccd-f2447eaf56cf.png)

取得できる項目は少しエクスポートの場合と違いますのが、DeviceIDややユーザー名等も取得できています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/db91a5fe-ed32-418c-6eef-f7be1ae3da30.png)


## 件数に関して方法1と2の差

こちらのテナントに登録されているデバイスは以下です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/77d19892-f17d-4736-6caa-5663ebdf69e0.png)
Graph APIでは、赤く囲った5台のみ取得でき、Intuneの管理の中で「準拠していない」デバイスは対象外となりました。
Macはどちらも取得できずです。

それから取得できたアプリが、方法1のエクスポートのほうが明らかに多いのは、
- Microsoft.xxx といった既存に組み込まれたアプリも拾う
- Microsoft Storeアプリも拾う
といった違いがあるようです。

取得するファイルは2022年4月2日現在、**Detected**と**Discovered**でファイル名も違います。

この内容、件数に違いがあるという点にご注意ください。

## MEMの画面で件数が他と違うのは...

　同じアプリで、複数のデバイスにそれぞれ違うバージョンが入っているケースのあるときに、違うバージョンのアプリ毎にサマられてリストされます。
件数が多くなったのはそのためですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/3f984b15-f61b-8dbe-3c2c-5e949942bd71.png)

## 方法2のPower Automateによる自動CSV出力

　方法2のGraph APIによる取得方法は、Power Automateを使えばGraphエクスプローラーなく自動化できます。試してみましたので概要のみ掲載し詳細の説明は割愛します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/28ef1d79-8228-d599-9452-074b8370d667.png)

ZipダウンロードのURL取得は何故か3回呼ばないと取得できずでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/e30dca35-ce84-caa7-c8b7-8f3762d4ef21.png)

アプリの登録では、Graph APIの許可、シークレットの発行等を行います。

### Power Automateのアクション スッキリ版

@MiyakeMito さんにアドバイスいただき、Power AutomateのアクションをDo Untilを使ってスッキリさせたものは以下です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/4d1c42ee-e3ae-6a9f-4b73-6932d6148fbc.png)

待ち時間は、1秒待ちだと8回、2秒待ちだと3回で適切感でてきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419691/7dd1be30-ef74-bb8a-d493-930bfbca5f09.png)

尚、「待ち時間」は、アクションの呼び出し時「遅延」であることに注意を（たなさん、Thanks :-) ）

# おわりに
　Power BIの認定コネクタに「Intue Data Warehouse（ベータ）」があります。こちらもデータウェアハウスなので、アプリの一覧は取れません。
ベータとのことなので、将来的にはエクスポートでもGraphでもなく、コネクタでアプリ一覧も取得できるように実現して欲しいものですね。
データウェアハウスも、アプリ取得の復活も含めて進化して欲しいものです。

 今回はIntuneで検知したアプリの取得でしたが、同様の手順で別なレポートも取得できるのでは、と思います。
例えば、MEMの画面（アプリ > モニター > 検出されたアプリ）の一覧は、**DetectedAppsAggregate** で取得できます（対象デバイスが明細でなくデバイス数のみサマられているもの）
　と書いているうちに、冒頭の「2022/4/3 追記」にあるように**DetectedAppsRawData**も取得できることに気が付きましたw

https://docs.microsoft.com/ja-jp/mem/intune/fundamentals/reports-export-graph-available-reports?WT.mc_id=DP-MVP-5004418 

https://docs.microsoft.com/ja-jp/mem/intune/developer/reports-proc-get-a-link-powerbi?WT.mc_id=DP-MVP-5004418

https://docs.microsoft.com/ja-jp/troubleshoot/mem/intune/build-software-inventory-power-bi?WT.mc_id=DP-MVP-5004418