- t_o_dと申します。
- Jamf Proでのデバイス管理の際に、Jamf APIを利用すると容易に情報を取得することができます。
- そこでGASを利用してパッチ情報を一覧としてシートに書き出す方法を記録いたします。
結果
- 今回の手順で以下のような「パッチ一覧シート」を作成します。
環境
- mac OS Ventura 13.1
- Google Apps Script
準備
- Jamf Pro APIを利用するためのアカウントを用意してこちらを参考に以下の権限を付与してください。
- Read - Patch Management Software Titles
手順
スプレッドシート作成
- 新規でスプレッドシートを作成してください。
- その後、シート内の「拡張機能」タブから「Apps Script」でスクリプトエディタを開いてください。
プロパティ設定
- スクリプトエディタを開いたら、スクリプトプロパティに以下の内容を設定してください。
プロパティ | 値 |
---|---|
BASIC_TOKEN | Jamfユーザー名:Jamfパスワード 例: ユーザー名がaaa、パスワードがbbbであれば「aaa:bbb」となる。 |
CLASSIC_API_BASE | Jamf CLASSIC API URL |
PRO_API_BASE | Jamf PRO API URL |
SHEET_ID | 上記で作成したスプレッドシートID |
コード記述
- プロパティ設定後、以下の内容をスクリプトエディタの任意のgsファイルに記述します。
const properties = PropertiesService.getScriptProperties().getProperties();
const baseProApi = properties.PRO_API_BASE
const baseClassicApi = properties.CLASSIC_API_BASE
function main(){
// シート情報
const patchSheetId = properties.SHEET_ID
const patchSheet = SpreadsheetApp.openById(patchSheetId).getSheets()[0];
const headers = [['タイトル','情報']]
const columns = headers[0].length
const lastRow = patchSheet.getLastRow()
// 初期化
if(lastRow !== 0){
patchSheet.getRange(1, 1, lastRow, columns).clearContent();
}
// Bearerトークン
const bearToken = getBearerToken();
// パッチタイトル情報
const patchTitles = getPatchTitles(bearToken);
const patchTitleIds = patchTitles.map(title => title.id);
// 書き込み配列生成
const insertPatches = patchTitleIds.map(titleId => {
// 指定IDのパッチ情報
const patchReports = getPatchReports(bearToken, titleId);
// 指定IDのパッチ名
const patchName = patchReports.name;
// 指定IDのパッチ詳細(対象コンピュータやや対象バージョン)
const patchVersions = patchReports.versions
return [
patchName,
JSON.stringify(patchVersions), // 結果のオブジェクトをまとめて1セルに格納
]
})
// ヘッダーとマージ
const insertValues = [...headers, ...insertPatches];
// 書き込み
patchSheet.getRange(1, 1, insertValues.length, columns).setValues(insertValues);
}
// Bearerトークン取得
function getBearerToken(){
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 getPatchTitles(bearerToken){
const res = UrlFetchApp.fetch(`${baseClassicApi}/patchsoftwaretitles`, {
method: 'get',
headers: {
'Authorization': `Bearer ${bearerToken}`,
'accept': 'application/json'
}
})
const json = JSON.parse(res.getContentText())
return json.patch_software_titles
}
// 特定タイトルのパッチレポート取得
function getPatchReports(bearerToken, titleId){
const res = UrlFetchApp.fetch(`${baseClassicApi}/patchreports/patchsoftwaretitleid/${titleId}`, {
method: 'get',
headers: {
'Authorization': `Bearer ${bearerToken}`,
'accept': 'application/json'
}
});
const json = JSON.parse(res.getContentText());
return json.patch_report
}
実行
- コード記述後、main関数を実行して、スプレッドシートが以下のように検出されたパッチ情報となることを確認します。
- 以上です。
まとめ
- 今後もJamf APIのさまざまなサービスを適宜利用していき、日々の業務改善に努めてまいります。
参考
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。