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

这里的技术是共享的

You are here

jamf policy -id 112 调用了某一个策略 ,如何传递参数给策略的脚本 ,,,,,,jamf policy -event aaaaa 调用了某一个策略 ,如何传递参数给策略的脚本 chatgpt 有大用

jamf policy -id 112 调用了某一个策略 ,如何传递参数给策略的脚本 ,,,,,,jamf policy -event aaaaa 调用了某一个策略 ,如何传递参数给策略的脚本

这个问题其实踩坑的人不少 😊。我帮你梳理一下:


🔹 Jamf 里参数的机制

  • Jamf Policy → Scripts 里,你可以设置 Parameter 4 ~ Parameter 11(GUI 里写名字,脚本里通过 $4 ~ $11 来取值)。

  • 这些参数 不是运行时 jamf policy 触发时传递的,而是 绑定在 Policy 配置里的

  • 所以你执行

    jamf policy -id 112 jamf policy -event aaaaa

    Jamf Agent 只会调用服务器上定义好的策略,并执行它绑定的脚本,同时把 GUI 里填的参数传给脚本。

👉 也就是说:jamf policy -event xxx 本身没法直接传 shell 参数进去。


🔹 那如果我一定要动态传参数?

有几种常见做法:

方法 1:在策略里定义参数

  • 在 Policy → Scripts → Parameter Values 里写死,比如:

    • Parameter 4 = --clean

    • Parameter 5 = /tmp/test

  • 脚本里取:

    mode=$4 path=$5 echo "模式: $mode, 路径: $path"

这样调用 jamf policy -event aaaaa 就能拿到这些值。


方法 2:通过自定义触发 + 外部配置文件

  1. 建一个策略,Trigger = aaaaa

  2. 脚本里从一个本地文件读取参数:

    PARAM_FILE="/tmp/jamf_params.txt" if [[ -f "$PARAM_FILE" ]]; then    source "$PARAM_FILE" fi

  3. 你在调用前写参数:

    echo 'ARG1="clean"' > /tmp/jamf_params.txt echo 'ARG2="/tmp/test"' >> /tmp/jamf_params.txt jamf policy -event aaaaa


方法 3:把参数存在 Jamf 的 Extension Attribute / Computer Group

  • 比如 EA 写入某个 key → 脚本里用 defaults readjamf recon 抓。

  • 适合需要「和机器绑定」的配置,而不是临时运行时参数。


方法 4:多策略 + 不同参数

  • 如果参数固定几种,可以建多个策略,每个策略填不同参数。

  • 通过不同 event trigger 调用:

    jamf policy -event clean jamf policy -event install


✅ 总结:

  • jamf policy -event xxx 不能像 shell 那样直接传参数

  • 只能依靠 Policy → Parameter Values 配置,或者用 配置文件/环境变量/多策略 来变通。


要不要我给你写个 最常用的做法 Demo(比如 jamf policy -event deployapp,参数写在 Jamf 控制台里,脚本里 $4 $5 读取)?

好 👍,我给你写一个 完整 Demo,展示如何在 Jamf 里通过 jamf policy -event deployapp 传参数给脚本。


① Jamf Pro 后台配置

  1. 新建一个 Policy,名字比如 "部署应用"

  2. General → Custom Event 填入:

    deployapp

    ✅ 这样就能用 jamf policy -event deployapp 来触发。

  3. Scripts 里加一个脚本,并在 Parameter Labels 里写上参数说明:

    在 GUI 上的效果大概是:

    Parameter 4: App Name Parameter 5: Download URL Parameter 6: Install Path

  • Parameter 4 → App 名称

  • Parameter 5 → 下载 URL

  • Parameter 6 → 安装路径

  • 保存策略。


  • ② 绑定的脚本示例

    #!/bin/bash # Jamf 参数传递 Demo 脚本 # $4 = App 名称 # $5 = 下载 URL # $6 = 安装路径 APP_NAME="$4" APP_URL="$5" INSTALL_PATH="$6" echo "准备安装应用: $APP_NAME" echo "下载地址: $APP_URL" echo "安装路径: $INSTALL_PATH" # 下载 TMP_PKG="/tmp/${APP_NAME}.pkg" curl -L -o "$TMP_PKG" "$APP_URL" || {    echo "下载失败"    exit 1 } # 安装 /usr/sbin/installer -pkg "$TMP_PKG" -target "$INSTALL_PATH" || {    echo "安装失败"    exit 1 } echo "$APP_NAME 已安装完成!" exit 0


    ③ 调用方式

    在任何终端(或其他脚本里)运行:

    jamf policy -event deployapp

    Jamf 就会执行后台的这个策略,并把你在 Policy → Scripts 里填好的 参数值 注入 $4/$5/$6


    ④ 关键点

    • 参数值是写死在 Jamf 控制台里的(不是 jamf policy -event 运行时传)。

    • 不同 App 可以建多个策略,填不同参数。比如:

      • jamf policy -event deploychrome

      • jamf policy -event deployzoom


    要不要我帮你写一个 「一套脚本,多策略调用不同软件」 的配置方案?这样你只维护一个脚本,参数在不同策略里填,就能通过不同 event 安装不同的软件。


    好嘞 👍,我来帮你设计一个 一套脚本 + 多个策略 + 不同参数 的方案,这样你只需要维护一份脚本,就能在 Jamf 里通过不同的 event 来安装不同的软件。


    🎯 目标

    • 脚本:通用安装器,只负责读取参数并执行安装。

    • 策略:一个软件对应一个策略,不同策略填不同参数。

    • 触发:每个策略用不同的自定义 event,比如 deploy_chromedeploy_zoom


    ① 通用脚本:InstallApp.sh

    上传到 Jamf Pro → Scripts 里。

    #!/bin/bash # InstallApp.sh - 通用安装脚本 # $4 = App 名称 # $5 = 下载 URL # $6 = 安装路径 (默认 /Applications) APP_NAME="$4" APP_URL="$5" INSTALL_PATH="${6:-/Applications}" echo "=== 开始安装: $APP_NAME ===" echo "下载地址: $APP_URL" echo "安装路径: $INSTALL_PATH" # 临时包路径 TMP_PKG="/tmp/${APP_NAME}.pkg" # 下载 pkg echo "[*] 下载中..." if ! curl -L -o "$TMP_PKG" "$APP_URL"; then    echo "[!] 下载失败"    exit 1 fi # 安装 echo "[*] 安装中..." if ! /usr/sbin/installer -pkg "$TMP_PKG" -target "$INSTALL_PATH"; then    echo "[!] 安装失败"    rm -f "$TMP_PKG"    exit 1 fi # 清理 rm -f "$TMP_PKG" echo "=== $APP_NAME 安装完成 ===" exit 0


    ② 策略示例

    策略 1:部署 Chrome

    • General → Custom Eventdeploy_chrome

    • Scripts → 参数配置

      • Parameter 4 = Google Chrome

      • Parameter 5 = https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.pkg

      • Parameter 6 = /Applications


    策略 2:部署 Zoom

    • General → Custom Eventdeploy_zoom

    • Scripts → 参数配置

      • Parameter 4 = Zoom

      • Parameter 5 = https://zoom.us/client/latest/Zoom.pkg

      • Parameter 6 = /Applications


    策略 3:部署 Slack

    • General → Custom Eventdeploy_slack

    • Scripts → 参数配置

      • Parameter 4 = Slack

      • Parameter 5 = https://downloads.slack-edge.com/releases/macos/Slack.pkg

      • Parameter 6 = /Applications


    ③ 调用方式

    终端里运行:

    jamf policy -event deploy_chrome jamf policy -event deploy_zoom jamf policy -event deploy_slack

    Jamf 就会根据不同的 event 执行相应的策略,但脚本始终是同一份 InstallApp.sh


    ✅ 好处

    • 只维护一份脚本,减少重复。

    • 策略参数化,新增软件只需要新建一个策略 + 填参数,不用复制脚本。

    • 清晰可控,可以批量执行:

      jamf policy -event deploy_chrome jamf policy -event deploy_zoom


    要不要我帮你再扩展一下,让这份脚本支持 .dmg.zip 软件包(不仅仅是 .pkg)的安装?





    普通分类: