[GAS]Microsoft Graphを利用してデバイス及び紐づいたユーザー情報をまとめた一覧シートを作成

2023.02.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

  • 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サイトをご覧ください。