見出し画像

Intuneで24時間以内に登録された端末の情報をSlackに1日1回通知する

Intuneに登録された端末を毎回確認するのが面倒くさく、そんなに頻繁でなくてもいいので、Slackなどで必要最低限の情報だけ通知するように設定しました。

先人の方々のブログを参考にさせていただき、Microsoft Power AutomateのHTTPコネクタからMicrosoft Graph APIを利用してIntuneの端末情報(端末名、ユーザー名、登録日時)を取得し、SlackのIncoming Webhook を利用してSlackに1日一度通知が来るよう設定しました。

下記の手順を実施するには

  • Intuneの管理者権限

  • Power Automateの有料版

が必要となります。

こちらの記事を大変参考にさせていただきました。
大筋はほとんどこちらの記事と同じです。

Microsoft Graph APIを利用してIntuneの情報を取得する

Microsoft Graph は、Microsoftが提供するサービスのリソースへのアクセスを可能にするAPIです。

Intuneに登録されたデバイスの情報は、
Microsoft Graph APIの「デバイス管理」、deviceManagementオブジェクトから取得することが可能です。

Intuneに登録されたデバイス一覧を表示する。

<https://graph.microsoft.com/beta/deviceManagement/managedDevices>

上記のURIについて、Microsoft Graph Explorerなどを利用して実行して取得できる値を確認します。 Microsoft Graph APIではフィルターなども利用可能ですので、フィルターを利用して必要な値を絞り込みます。

特定の日付でフィルターします。
下記では、2022年4月1日から4月2日にIntuneに登録されたデバイス情報を表示します。
(日付は後でPower Automateで設定するので一旦適当でOK)

?filter=enrolledDateTime ge 2022-04-01T00:00:00Z and enrolledDateTime le 2022-04-02T00:00:00Z&$

取得するプロパティ(列)をフィルターする。
今回は、デバイス名、ユーザの表示名、登録日を取得します。

$select=deviceName,userDisplayName,enrolledDateTime

特定の期間にIntuneに登録されたデバイスの情報を取得するには下記のようなリクエストになります。

<https://graph.microsoft.com/beta/deviceManagement/managedDevices?filter=enrolledDateTime> ge 2022-04-01T00:00:00Z and enrolledDateTime le 2022-04-02T00:00:00Z&select=deviceName,userDisplayName,enrolledDateTime

Azure ADでアプリを作成する

情報が取得できることを確認したら、Azure ADでアプリを作成します。
アプリの作成方法などは下記の記事を参考にさせていただきました。

アプリを作成する際に、下記を控えておきます。

  • Azure ADの管理画面に記載されているテナント名

  • クライアントID

  • シークレット

SlackのIncoming Webhookを作成する

下記を参考に作成します。
その際に生成されたIncoming Webhook URLは後ほど利用します。

Power Automateでフローを作成する

Power Automateにアクセスします。
1日に一度フローを実行したいので、スケジュールフローを作成します。

フローの全体像は以下のようになります。

  1. 繰り返し

  2. 現在の時刻

  3. 時間からの減算

  4. HTTP

  5. JSONの解析

  6. HTTP

繰り返し

繰り返しの期間を設定します。 今回は1日1回、12時で設定します。
「現在の時刻」 新しいステップ→検索ウィンドウに「時刻」などを入力し、「日時」から「現在の時刻」を選択します。

時間からの減算

上のステップと同様に、「日時」から「時間からの減算」を取得します。
基準時間を「現在の時刻」に設定し、間隔を「24」、時間単位を「時間」にします。

HTTP

APIを取得するためのHTTPリクエストのステップを作成します。

  • 方法:GET

  • URL:https://graph.microsoft.com/v1.0/deviceManagement/managedDevices

  • ヘッダー:なし

  • クエリ①:現在から24時間以内の端末を取得

    • キー:$filter

    • 値:enrolledDateTime ge @{body('時間からの減算')} and enrolledDateTime le @{body('現在の時刻')}

    • @の部分は前のステップで作成した変数を利用

  • クエリ②:必要な情報のみを取得

    • キー:$select

    • 値:deviceName,userDisplayName,enrolledDateTime

  • 認証:Active Directory OAuth

  • テナント:Azure ADの管理画面に記載されているテナント名

  • 対象ユーザー:https://graph.microsoft.com

  • クライアントID:作成したアプリのクライアントID

  • シークレット:作成したアプリのシークレット

JSONの解析

取得できたJSONを解析し、変数として扱えるようにします。 サンプルは前のステップで取得したJSONを利用します。

取得した結果をSlackへIncoming Webhookで投稿する

  • 方法:PUT

  • URL:先程生成した対象チャンネルのIncoming Webhook URL

  • ヘッダー

    • キー:Content-type

    • 値:application/json

  • 本文

    • 先程取得したJSON解析の値を利用します。

    • 今回は、$SelectでフィルターしたdeviceName、userDisplayName,enrolledTimeをてテキストで出力

色々と修飾もできるのですが、今回は最低限でいいのでテキスト形式で一列にしました(力尽きた)


{ "text": "deviceName : @{items('Apply_to_each')?['deviceName']},userDisplayName : @{items('Apply_to_each')?['userDisplayName']}, enrolledDateTime : @{items('Apply_to_each')?['enrolledDateTime']}" }

メッセージの書き方は書きを参考に。

フローのテスト

フローが完成したらテストを実行し、出力を確認します。
フローが正常に動いている場合は24時間に一度指定時刻にデバイス名、ユーザーの表示名、登録日がチャンネルに投稿されます。



この記事が気に入ったらサポートをしてみませんか?