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

这里的技术是共享的

You are here

调试 jamf 代码 直接放到 macos 电脑上 能正常运行,但是放到 jamf 的脚本里 ,通过 self service 就不能正常运行,就报错 AG chatgpt 有大用 有大大用 有大大大用 有大大大大用

#!/bin/zsh
#
ComputerName=$(scutil --get ComputerName)
Serial=$(system_profiler SPHardwareDataType | grep "Serial Number" | awk '{print $4}')
Version="$(sw_vers -productName) $(sw_vers -productVersion)"
#IP=$(ifconfig | grep "inet " | grep -v 127.0.0.1 | head -n 1 | awk '{print $2}')
wired_mac=$(networksetup -listallhardwareports | awk '/Hardware Port: Ethernet/{getline; getline; print $3}'| head -n 1 )
wireless_mac=$(networksetup -listallhardwareports | awk '/Hardware Port: Wi-Fi/{getline; getline; print $3}'| head -n 1 )
curr_user=$(id -un)
keyword_file=$(mdfind '((kMDItemFSName == "*AAA*"cd) || (kMDItemFSName == "*BBB*"cd) || (kMDItemFSName == "*CCC*"cd) || (kMDItemFSName == "*DDD*"cd)|| (kMDItemFSName == "*EEE*"cd) ) && ((kMDItemFSName == "*.pdf"cd) || (kMDItemFSName == "*.ppt"cd) || (kMDItemFSName == "*.pptx"cd) || (kMDItemFSName == "*.key"cd) || (kMDItemFSName == "*.png"cd) || (kMDItemFSName == "*.jpg"cd) || (kMDItemFSName == "*.jpeg"cd))' -0 | \
while IFS= read -r -d '' file; do
    if [[ "$file" != /Library/* && "$file" != /System/Library/*  ]]; then
        printf "%s<br/>" "$file"
    fi
done)
keyword_file=$(echo $keyword_file | sed 's/"/\\"/g')  #处理双引号
#echo $keyword_file
#echo "MMMMM"
#echo $keyword_file
#echo  "BBBB"
#echo $ComputerName
#echo $Serial
#echo $Version
#echo $IP
#echo $wired_mac
#echo $wireless_mac
#echo $curr_user
#keyword_file=$(echo $keyword_file | sed 'N;s/\n/<br>/;P;D') #替换 \n 为 <br/>
#echo $keyword_file
#echo "BBB"
#keyword_file=$(echo $keyword_file | sed 's/"/\\"/g')  #处理双引号
#keyword_file=$(echo $keyword_file | tr -d "\n")  #移除换行符
#echo $keyword_file
#echo  "AAA"
#echo $keyword_file | sed 'N;s/\n/<br>/;P;D'
#keyword_file=$(echo $keyword_file | sed 'N;s/\n/<br>/;P;D') #替换 \n 为 <br/>
#echo "AAAAAAAAA"
#keyword_file=""
echo $keyword_file
DATA="{\"ComputerName\":\"${ComputerName}\",\"Serial\":\"${Serial}\",\"Version\":\"${Version}\",\"wired_mac\":\"${wired_mac}\",\"wireless_mac\":\"${wireless_mac}\",\"curr_user\":\"${curr_user}\",\"keyword_file\":\"${keyword_file}\"}"
echo $DATA
Result=$(curl  -X POST http://aaa.bbbb.com/get_keyword_file_info     -H "Content-Type: application/json"  -d "${DATA}")
echo $Result
#echo $Result 结果类似于 {"result":"成功获取"}
Result=$(echo $Result | awk -F'"' '{print $4}')
if [ "$Result" = "成功获取" ]; then
fi
(/usr/bin/osascript -e "display dialog \"${Result},自动打开浏览器查看\" buttons {\"OK\"} default button \"OK\" with title \"敏感文件\"  ")

上面的代码 直接放到 macos 电脑上 能正常运行,但是放到 jamf 的脚本里 ,通过 self service 就不能正常运行,就报错:

jamf 中运行脚本 ,报错在哪里查看

这个问题问得好 👍。Jamf 里运行脚本时,如果报错,日志并不会直接在终端里看到,而是分几种情况可以查看:


📍 查看 Jamf 脚本运行报错位置

1. 在 Jamf Pro 控制台

  • 打开 Jamf Pro Web 控制台Computers → 找到对应的 Mac → HistoryPolicy Logs

  • 在执行过的 Policy 里,可以看到 Script 运行日志,报错信息也会记录在里面。


2. 在客户端 Mac 本地

Jamf Agent 把执行日志写在本地的 log 文件里:

  • 主日志文件

    /var/log/jamf.log


    里面能看到脚本执行的过程,包括报错信息。

  • Policy 运行日志(自助服务 / MDM 下发)
    当你用 Self Service 点击运行脚本时,也会实时打印执行日志,可以直接在 Self Service 界面看到(右上角的 Details)。


3. 自己调试时输出

如果想调试脚本,可以在脚本里加:

set -x  # 打开调试模式,执行每行都会输出 exec > /var/tmp/myscript.log 2>&1  # 把所有输出和错误写入 /var/tmp/myscript.log


这样即使 Jamf 的日志里没显示全,你也能在 /var/tmp/myscript.log 里完整查看报错。

这两行要放在你脚本的最上面#!/bin/zsh 后面),这样脚本执行的 所有输出(标准输出 + 错误输出) 都会被重定向到 /var/tmp/myscript.log,方便排查问题。


✅ 建议调试步骤

  1. 在 Jamf 里新建一个 Policy,Scope 里只选一台测试 Mac。

  2. 脚本开头加上:

    #!/bin/zsh set -x exec > /var/tmp/test_jamf_script.log 2>&1


  3. 在客户端跑 Self Service → 执行 → 去 /var/tmp/test_jamf_script.log 里看完整报错。


要不要我帮你写一个 调试版本的脚本模板,直接加上日志输出和错误捕捉,方便你在 Jamf 测试?



普通分类: