[GAS]Jamf APIを利用して指定したアプリがインストールされたモバイルデバイス一覧を取得する

2023.02.03

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

  • t_o_dと申します。
  • Jamf Proでのデバイス管理の際に、Jamf APIを利用すると容易に情報を取得することができます。
  • そこでGASを利用して指定のアプリがインストールされたモバイルデバイス一覧を取得する方法を記録いたします。

環境

  • mac OS Ventura 13.1
  • Google Apps Script

準備

  • Jamf APIを利用するためのアカウントを用意してこちらを参考に以下の権限を付与してください。
    • JAMF CLASSIC API : Read - Mobile Device Apps

手順

スクリプトエディタ起動

  • Googleドライブを開き、新規で「Google Apps Script」を作成してスクリプトエディタを起動してください。

プロパティ設定

  • スクリプトエディタを開いたら、スクリプトプロパティに以下の内容を設定してください。
プロパティ
BASIC_TOKEN Jamfユーザー名:Jamfパスワード
例: ユーザー名がaaa、パスワードがbbbであれば「aaa:bbb」となる。
CLASSIC_API_BASE Jamf CLASSIC API URL
PRO_API_BASE Jamf PRO API URL

コード記述

  • プロパティ設定後、以下の内容をスクリプトエディタの任意のgsファイルに記述。
const properties = PropertiesService.getScriptProperties().getProperties();
const baseProApi = properties.PRO_API_BASE
const baseClassicApi = properties.CLASSIC_API_BASE

function main(){
  // 対象アプリ名
  const searchName = '対象アプリ名';

  // Bearerトークン取得
  const token = getBearToken();

  // モバイルアプリ一覧取得
  const mobileDeviceApps = getMobileDeviceApplications(token);

  // アプリID取得
  const mobileDeviceAppId = mobileDeviceApps.find(app => app.name.includes(searchName))?.id;
  if(!mobileDeviceAppId) throw new Error('指定のアプリが見つかりませんでした。');

  // 指定のアプリ情報取得
  const mobileDeviceApp = getMobileDeviceApplication(token, mobileDeviceAppId)

  // 紐づいているモバイルデバイス一覧取得
  const mobileDevices = mobileDeviceApp.mobile_device_application.scope.mobile_devices
  if(!mobileDevices) throw new Error('モバイルデバイス一覧が見つかりませんでした。');

  // デバイス名出力
  const mobileDeviceNames = mobileDevices.map(device => device.name);
  console.log(`個数 : ${mobileDeviceNames.length}`)
  console.log(`デバイス名 : ${mobileDeviceNames}`)
}

// Bearerトークン取得
function getBearToken(){
  const basicToken = Utilities.base64Encode(properties.BASIC_TOKEN)
  const res = UrlFetchApp.fetch(`${baseProApi}/auth/token`, {
      method: 'post',
      headers: {
        'Authorization': `Basic ${basicToken}`,
      },
  });
  const json = JSON.parse(res.getContentText());
  return json.token
}

// モバイルデバイスアプリ一覧取得
function getMobileDeviceApplications(bearerToken){
  const res = UrlFetchApp.fetch(`${baseClassicApi}/mobiledeviceapplications`, {
    method: 'get',
    headers: {
      'Authorization': `Bearer ${bearerToken}`,
      'accept': 'application/json'
    }
  })
  const json = JSON.parse(res.getContentText())
  return json.mobile_device_applications
}

// 特定のアプリ情報取得
function getMobileDeviceApplication(bearerToken, id){
  const res = UrlFetchApp.fetch(`${baseClassicApi}/mobiledeviceapplications/id/${id}`, {
    method: 'get',
    headers: {
      'Authorization': `Bearer ${bearerToken}`,
      'accept': 'application/json'
    }
  })
  const json = JSON.parse(res.getContentText())
  return json
}

実行

  • コード記述後、7行目の「対象アプリ名」を任意の値に修正します。
  • 修正後、main関数を実行して実行ログに「個数」「デバイス名」が表示されれば完了です。

  • 以上です。

まとめ

  • 今後もJamf APIのさまざまなサービスを適宜利用していき、日々の業務改善に努めてまいります。

参考

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。