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日に一度フローを実行したいので、スケジュールフローを作成します。
フローの全体像は以下のようになります。
繰り返し
現在の時刻
時間からの減算
HTTP
JSONの解析
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時間に一度指定時刻にデバイス名、ユーザーの表示名、登録日がチャンネルに投稿されます。
この記事が気に入ったらサポートをしてみませんか?