[GAS]Microsoft Graphを利用してデバイス及び紐づいたユーザー情報をまとめた一覧シートを作成
- t_o_dと申します。
- AzureADでのデバイス管理の際に、Graph APIを利用すると容易に情報を取得することができます。
- そこでGASを利用して登録されているデバイス及び紐づいたユーザー情報をまとめた一覧シートを作成する方法を記録いたします。
結果
- 今回の手順で以下のような「デバイス一覧(ユーザー情報含む)シート」を作成します。
環境
- mac OS Ventura 13.1
- Google Apps Script
準備
- Graph API認証のため以下の値を公式サイトやこちらの記事を参考に取得してメモしておいてください。
- client_id : クライアントID
- client_secret : クライアントシークレット
- tennant_id : テナントID
手順
スプレッドシート作成
- 新規でスプレッドシートを作成して、ヘッダーを以下の内容にしてください。
- その後、シート内の「拡張機能」タブから「Apps Script」でスクリプトエディタを開いてください。
プロパティ設定
- スクリプトエディタを開いたら、スクリプトプロパティに以下の内容を設定してください。
プロパティ | 値 |
---|---|
CLIENT_ID | 上記でメモしたクライアントID |
CLIENT_SECRET | 上記でメモしたクライアントシークレット |
SHEET_ID | 上記で作成したスプレッドシートID |
TENNANT_ID | 上記でメモしたテナントID |
コード記述
- プロパティ設定後、以下の内容をスクリプトエディタの任意のgsファイルに記述。
const baseApi = 'https://graph.microsoft.com/v1.0'; const authApi = 'https://login.microsoftonline.com'; const properties = PropertiesService.getScriptProperties().getProperties(); function main(){ const deviceSheetId = properties.SHEET_ID; const deviceSheet = SpreadsheetApp.openById(deviceSheetId).getSheets()[0]; // ヘッダー以外初期化 deviceSheet.getRange(2, 1, deviceSheet.getLastRow(), 7).clearContent(); // トークン取得 const token = getToken(); // デバイス情報取得 const devices = getDevices(token); // 書き込み deviceSheet.getRange(2, 1, devices.length, devices[0].length).setValues(devices); } function getToken(){ // 認証情報 const clientId = properties.CLIENT_ID; // クライアントID const clientSecret = properties.CLIENT_SECRET; // クライアントシークレット const tennantId = properties.TENNANT_ID; // テナントID // トークン取得 try { const res = UrlFetchApp.fetch(`${authApi}/${tennantId}/oauth2/v2.0/token`,{ method: 'post', payload: { 'client_id': clientId, 'scope': 'https://graph.microsoft.com/.default', 'client_secret': clientSecret, 'grant_type': 'client_credentials' } }); const json = JSON.parse(res.getContentText()); return json.access_token; }catch(err){ throw new Error('トークン取得エラー'); } } // 全デバイス情報取得 function getDevices(token){ const res = UrlFetchApp.fetch(`${baseApi}/deviceManagement/managedDevices?$select=id,deviceName,operatingSystem,model,osVersion,userDisplayName,emailAddress`,{ method: 'get', headers: { 'Authorization': `Bearer ${token}`, } }); const json = JSON.parse(res.getContentText()); return json.value.map(v => { return [ v.id, // デバイスID v.deviceName, // デバイス名 v.operatingSystem, // OS v.model, // OSモデル v.osVersion, // OSバージョン v.userDisplayName, // ユーザー名 v.emailAddress, // ユーザーメール ] }); }
実行
- コード記述後、main関数を実行して、スプレッドシートが以下の内容となることを確認します。
- 以上です。
まとめ
- 今後もMicrosoft Graphのさまざまなサービスを適宜利用していき、日々の業務改善に努めてまいります。
参考
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。