你这个问题要分两部分来看:
1. 在 Jamf 脚本中获取当前计算机的 computer_id
Jamf 在执行策略(policy)的时候,会自动在 /usr/local/jamf/bin/jamf
命令和环境里提供一些上下文变量。
常见方法有两种:
方法 A:用 jamf binary
computer_id=$(jamf recon -showComputerID | awk -F " = " '{print $2}') echo "Computer ID: $computer_id"
新版的 jamf # OK 有大用 当然方法有很多,就用这一种
computer_id=$(sudo jamf recon -showComputerID | grep -oE "<computer_id>[0-9]+</computer_id>" | awk -F'[><]' '{print $3}')
jamf recon -showComputerID
会输出类似:computer_id = 123
然后用
awk
提取出来。
方法 B:从 Jamf API 查询
jamfProURL="https://your.jamfcloud.com" auth="用户名:密码" serial=$(system_profiler SPHardwareDataType | awk '/Serial/ {print $4}') computer_id=$(curl -sku "$auth" "$jamfProURL/JSSResource/computers/serialnumber/$serial" \ -H "accept: application/xml" \ | xmllint --xpath "//computer/general/id/text()" -) echo "Computer ID: $computer_id"
这种方式需要 API 权限。
2. 在 Jamf 脚本中获取当前执行的 policy id
这一点比较 tricky ——Jamf 在执行 policy 的时候,脚本里没有直接提供一个现成的环境变量。
但是有两个思路:
方法 A:在策略里传递参数
在 Jamf Pro 的 Policy → Scripts → Parameter Values 里,可以手动设置一个参数,把当前策略的 ID (参数名) 写进去,比如:
在策略中 写参数值
Parameter 4 (这里是PolicyID) =
339
在脚本里用:
policy_id="$4" echo "Policy ID: $policy_id"
方法 B:在日志里解析
当 policy 执行时,/var/log/jamf.log
会写入一行:
Executing Policy PolicyName
Running script ScriptName...
但这里没有直接写 policy id。
如果要自动获取,只能用 API:
先知道 policy 的 custom trigger 或名称
再通过 Jamf API 查询 policy ID。
示例(用 policy 名称反查 ID):
policy_name="Test Policy"
jamfProURL="https://your.jamfcloud.com"
auth="用户名:密码"
policy_id=$(curl -sku "$auth" "$jamfProURL/JSSResource/policies/name/$policy_name" \
-H "accept: application/xml" \
| xmllint --xpath "//policy/general/id/text()" -)
echo "Policy ID: $policy_id"
✅ 总结:
computer_id 可以直接
jamf recon -showComputerID
得到。policy_id 脚本中没有现成变量,需要你 手动传参 或 API 查询。
要不要我帮你写一个通用的 shell 脚本,既能拿到当前 computer_id,也能根据 policy 名称/API 拿到 policy_id?