欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

jamf 脚本中 获取 当前的 策略id 和 在 jamf 中 的 computer_id AG chatgpt 有大用 有大大用 有大大大用

chatgpt  jamf 脚本中 获取 当前的 策略id 和 在 jamf 中 的 computer_id


你这个问题要分两部分来看:

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 (参数名) 写进去,比如:

image.png

在策略中 写参数值

image.png

  • 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?




AG  jamf 脚本中 获取 当前的 策略id 和 在 jamf 中 的 computer_id

在Jamf Pro脚本中获取当前执行的策略ID和计算机ID可以通过以下方法实现:

1. 获取当前策略ID (policy_id)

在策略执行的脚本中,Jamf Pro会通过环境变量传递策略ID:

bash
policy_id="$4"

注意:Jamf Pro通常将策略ID作为第4个参数传递给脚本(0是脚本路径,1-$3是其他预留参数)。

2. 获取计算机ID (computer_id)

有几种方法可以获取计算机ID:

方法一:通过Jamf二进制命令

bash
computer_id=$(jamf recon | awk -F': ' '/computer_id/{print $2}')

方法二:通过系统串号查询(需要API调用)

bash
serial_number=$(system_profiler SPHardwareDataType | awk '/Serial/ {print $NF}') api_user="your_api_user" api_pass="your_api_pass" jamf_url="https://your.jamf.instance.com" computer_id=$(curl -su "$api_user:$api_pass" \  -H "Accept: text/xml" \  "$jamf_url/JSSResource/computers/serialnumber/$serial_number" | \  xmllint --xpath "//computer/general/id/text()" -)

方法三:通过本地扩展属性(如果已设置)

bash
computer_id=$(defaults read /Library/Preferences/com.jamfsoftware.jamf.plist computer_id)

完整示例脚本

bash
#!/bin/bash # 获取策略ID (第4个参数) policy_id="$4" # 获取计算机ID computer_id=$(jamf recon | awk -F': ' '/computer_id/{print $2}') # 记录日志 echo "策略ID: $policy_id" >> /var/log/jamf_script.log echo "计算机ID: $computer_id" >> /var/log/jamf_script.log # 其他操作...

注意事项

  1. 使用API方法需要确保:

  • API账号有读取权限

  • 系统已安装xmllint工具(或使用其他XML解析方式)

  • 使用了安全的API凭据存储方式

  • 在Jamf Pro 10.22+版本中,推荐使用更安全的替代方案替代明文API密码

  • 策略ID只在通过策略执行脚本时可用,如果是通过其他方式执行的脚本则无法获取

  • 计算机ID在移入Jamf时会分配,且不会改变(除非删除后重新注册)



  • deepseek 获取计算机 ID 的详细步骤

    通过API查询计算机ID通常需要以下几个步骤:

    1. 准备API凭证:在Jamf Pro中创建一个具有“计算机读取”权限的API账号和密码,或者使用更安全的客户端凭据(Client ID 和 Client Secret)

    2. 获取设备标识符:在脚本中获取本机的唯一标识,如序列号(Serial Number) 或主机名(Hostname)

      bash
      # 获取序列号
      serial_number=$(system_profiler SPHardwareDataType | awk '/Serial/ {print $4}')
    3. 调用Jamf Pro API:使用上一步获取的标识符向Jamf Pro的API发起查询请求,从返回的JSON数据中提取计算机ID。

      bash
      # 示例:使用Basic Auth通过序列号查询计算机ID
      jss_url="https://your-jamf-pro-instance.jamfcloud.com"
      api_user="your_api_username"
      api_pass="your_api_password"
      serial_number="YOUR_SERIAL_NUMBER"
      
      computer_id=$(curl -s -u "$api_user:$api_pass" \
        -H "Accept: application/json" \
        "$jss_url/JSSResource/computers/serialnumber/$serial_number" | \
        grep -o '"id":[0-9]*' | cut -d: -f2)
      
      echo "此计算机的ID是: $computer_id"


    普通分类: