Admina APIを使ってMacのホスト名を資産番号にしてみた

はじめに

こんにちは。スタートアップ企業で情シスをしているヤスムラです。
皆さんの会社ではPCのホスト名にどのようなルールで付与していますか?

私は今まで、会社で決めた資産番号を設定していることが多かったんですが、MDMなどでホスト名を設定する場合、事前に資産番号とシリアル番号を組み合わせたCSVを用意してPCを購入するたびに更新するなど、準備が大変でした。

そのため今回は、AdminaのAPIを使って、Macのホスト名に資産番号を自動設定するスクリプトを作成してみたので、ご紹介したいと思います。

Introduction
Introduction to the Public API Welcome to Admina's Public API! This RESTful API allows developers to programmatically ac...

スクリプトについて

今回作成したスクリプトはこちらです。

#!/bin/bash

# 1.Check for admin privileges
  if [ "$(id -u)" -ne 0 ]; then
      echo "Error: This script requires admin privileges. Please run with sudo." >&2
      exit 1
  fi


# 2.Get current hostname and serial number
  current_hostname=$(scutil --get LocalHostName)
  serial_number=$(system_profiler SPHardwareDataType | awk '/Serial/ {print $NF}')

  echo "Current hostname: $current_hostname"
  echo "Serial number: $serial_number"


# 3.Fetch asset number from API
	API_TOKEN="your_api_token"
	ORG_ID="your_org_id"
	 
  api_url="https://api.itmc.i.moneyforward.com/api/v1/organizations/$ORG_ID/devices?locale=ja&serial_number=$serial_number"
  response=$(curl -s -H "Authorization: Bearer $API_TOKEN" "$api_url")

	asset_number=$(echo "$response" | grep -o '"asset_number":"[^"]*"' | cut -d'"' -f4 || true)

  if [ -n "$asset_number" ]; then
      new_hostname=$asset_number
      echo "Asset number found: $asset_number"
  else
      new_hostname=$serial_number
      echo "No asset number found, using serial number"
  fi

  echo "New hostname will be: $new_hostname"


# 4.Change hostname if different
  if [ "$current_hostname" != "$new_hostname" ]; then
      if scutil --set LocalHostName "$new_hostname" && 
         scutil --set ComputerName "$new_hostname" && 
         scutil --set HostName "$new_hostname"; then
        echo "Hostname changed: $current_hostname → $new_hostname"
      else
        echo "Error: Failed to change hostname" >&2
        exit 1
      fi
  else
    echo "Current hostname is already set correctly: $new_hostname"
  fi

exit 0

処理の流れ

上記スクリプトでは、以下の手順でホスト名を変更します。

  1. 管理者権限でスクリプトが実行されているかチェック
  2. 現在のホスト名とシリアル番号を取得
  3. Admina APIを使ってシリアル番号から該当端末の資産番号を突合
  4. 突合した結果、資産番号が見つかった場合と見つからなかった場合で処理を分岐
    • 資産番号あり -> 資産番号をホスト名に設定
    • 資産番号なし -> シリアル番号をホスト名に設定

 


設定方法

スクリプトが完成したら対象端末で実行するだけです。
今回はKandji MDMを使ってスクリプトを配布してますが、どんな方法でもスクリプトを配布さえすれば動作します。

1.Admina – 必要情報の取得

以下公式サイトを参考にAdminaのAPIキーと組織IDを取得して下さい。

マネーフォワード Admina
マネーフォワードAdminaとの連携方法です。 マネーフォワードAdminaからマネーフォワードAdminaへの、管理者のログインから、連携方法まで一連の手順を解説します。

2.スクリプト – 修正

上記スクリプトの{API_TOKEN}と{ORG_ID}の部分を自身の環境に合わせて入力して下さい。

3.スクリプト – 配布

各MDMの手順を参考にスクリプトを配布して下さい。なおKandjiの場合は以下公式サイトを参考願います。

カスタムスクリプトの概要

今回はKandjiで配布しましたが、MDM独自の機能を使っているわけではないので、他のMDM(Jamf ProやMicrosoft Intune)でも動作するはずです。

動作確認

スクリプトを実行すると、以下のようなログが出力されます。
ホスト名が正しく資産番号に変更されていることをご確認ください。

Current hostname: MacBook-Pro
Serial number: C02ABCDEFGG
Asset number found: PC-A001
New hostname will be: PC-A001
Hostname changed: MacBook-Pro → PC-A001

 

補足

1.Kandji標準機能でのホスト名設定

  • 今回はスクリプトを利用しましたが、Kandjiの場合、シリアル番号などの基本情報でホスト名を設定することも可能です。詳細は以下公式ページをご参照ください。
Introduction
Introduction to the Public API Welcome to Admina's Public API! This RESTful API allows developers to programmatically ac...

2.他の資産管理サービスへの応用

  • 今回はAdminaからホスト名を取得しましたが、このスクリプトは他の資産管理サービスやスプレッドシートにも応用出来るようステップごとの処理をわけました。スクリプト内の# 3.Fetch asset number from APIの部分を、使用するサービスに合わせて変更するだけで済むので、他のサービスやスプシからホスト名を変更してみたい人はカスタマイズに挑戦してみて下さい。

まとめ

このスクリプトを導入したことで端末更新のたびに用意していたCSVが不要となり管理が容易になりました。なお今回はWindows向け(PowerShell)は作っていないので、どこかで作りたいと思います。

最後に、当方は副業情シスとして活動もしています。
こちらのサイトに詳細記載しておりますので、もしご興味がある方いればお気軽にお問い合わせ(またはDM等)ご連絡お待ちしております。

コメント

タイトルとURLをコピーしました