Jamf Pro APIを利用して登録されている各スクリプトをshellでローカルにテキストで書き出す方法

2022.12.10

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

  • t_o_dと申します。
  • Jamf Proでのデバイス管理の際に、Jamf Pro APIを利用すると容易に情報を取得することができます。
  • そこでJamfに登録されている各スクリプトをshellでローカルにテキストとして書き出す方法を記録いたします。

環境

  • mac OS Monterey 12.6
  • zsh 5.8.1

準備

  • Jamf Pro APIを利用するためのアカウントを用意してこちらを参考にに以下の権限を付与してください。
    • Read Scripts
  • 用意したら以下をメモしておいてください。
    • Jamfユーザー名
    • Jamfパスワード

手順

ファイル作成

  • APIの用意ができたら以下のコマンド適当なディレクトリにshファイルを作成してください。
# 適当なディレクトリ作成・移動
mkdir ~/jamf-contents
cd jamf-contents

# shファイル作成
touch get-scripts.sh

コード記述

  • ファイル作成後、以下の内容を作成したshファイルに記述してください。
#!/bin/zsh

set -e

# 各種情報
BASE="https://xxxxxx.jamfcloud.com/api/v1"
AUTH_ENDPOINT="auth/token"
SCRIPT_ENDPOINT="scripts"
USERNAME="ユーザー名"
PASSWORD="パスワード"
SCRIPTS_TMP=$(mktemp)

# 終了時一時ファイル消す。
trap "rm -rf $SCRIPTS_TMP" EXIT

# Bearerトークン取得
TOKEN=$(curl -s -X POST -u "$USERNAME:$PASSWORD" "$BASE/$AUTH_ENDPOINT" | plutil -extract token raw -)

# スクリプト情報を一時ファイルに入れる
curl -s "$BASE/$SCRIPT_ENDPOINT" -H "Authorization: Bearer $TOKEN" > $SCRIPTS_TMP

# 総数
count=$(cat $SCRIPTS_TMP | plutil -extract results raw -)

# スクリプト名をファイル名にしてスクリプト中身を総数分格納。
for i in $(seq 0 $((count - 1)))
do
  name=$(plutil -extract results.$i.name raw - < $SCRIPTS_TMP)
  plutil -extract results.$i.scriptContents raw -  "${name// /_}"
done
  • 記述後、上記のコードの以下の部分を各環境の値に書き換えてください。
    • BASE : Jamf API URL。xxxの部分は契約しているアカウント名。
    • USERNAME : メモしたJamfユーザー名
    • PASSWORD : メモしたJamfパスワード

実行

  • 記述後、以下のコマンドで実行してください。
# 実行権追加
chmod 755 get-scripts.sh
# 実行
./get-scripts.sh
  • 実行後、同一ディレクトリに各スクリプトファイルが作成されており、正常な中身であることを確認します。
# スクリプト一覧確認
$ ls ~/jamf-contents

xxxxx
xxxxx
get-scripts.sh
xxxx
xxxx

# 中身確認
$ cat xxxxx

sudo xxxx xxxx
  • 以上です。

まとめ

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

参考

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

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