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

这里的技术是共享的

You are here

jamf 策略里面 使用这个 脚本,,,在self service 里面 点击 是可以创建 downloadfromjamf 目录,下载LuxAI-1.1.2.dmg.zip 但是 策略里面 使用 联网的时候自动执行,就不能创建 downloadfromjamf 目录,,不能下载下载LuxAI-1.1.2.dmg.zip chatgpt 有大用 有大大用

#!/bin/bash    
#    
if [ -d /Applications/LuxAI.app/ ];then    
    exit 0    
fi    
sudo killall -9 "LuxAI"    
sudo rm -Rf "/Applications/LuxAI.app/"    
# 获取当前登录的用户    
CURRENT_USER=$(stat -f %Su /dev/console)
# 获取该用户的桌面路径    
USER_HOME=$(dscl . -read /Users/$CURRENT_USER NFSHomeDirectory | awk '{print $2}')
#(/usr/bin/osascript -e  "display dialog \"${USER_HOME}\" buttons {\"OK\"}   default button \"OK\"")    

   
/bin/mkdir -p "${USER_HOME}/Desktop/downloadfromjamf"    
cd  "${USER_HOME}/Desktop/downloadfromjamf"    
chmod -R 777 "${USER_HOME}/Desktop/downloadfromjamf"    

   
/usr/bin/curl -o "./LuxAI-1.1.2.dmg.zip"  http://aaaa.bbbb.com/util/software/LuxAI-1.1.2.dmg.zip  
unzip  -o "./LuxAI-1.1.2.dmg.zip"    
hdiutil attach "./LuxAI-1.1.2.dmg"    
sudo /bin/cp -a "/Volumes/LuxAI 1.1.2/LuxAI.app" /Applications/    
hdiutil detach "/Volumes/LuxAI 1.1.2/"  

   

   
(/usr/bin/osascript -e  'display dialog "成功安装Lux Ai,您可以删除桌面上的downloadfromjamf目录,如果打开Lux Ai出现错误,请重启电脑!" buttons {"OK"}   default button "OK"')

   
sudo spctl --master-disable    
sudo defaults write /Library/Preferences/com.apple.security GKAutoRearm -bool NO    
sudo xattr -r -d com.apple.quarantine "/Applications/LuxAI.app"    
sudo spctl --add --label "TrustedApp" /Applications/LuxAI.app    
sudo spctl --enable --label "TrustedApp"    

   
# 3. 强制立即生效(不重启也能应用)    
sudo killall Finder    
sudo killall SystemUIServer    


   
#把文件夹权限置为 777  ,让所有人可以删    
sudo chmod -R 777 "${HOME}/Desktop/downloadfromjamf/"    
#cd ../    
#rm -Rf "${HOME}/Desktop/downloadfromjamf"    
exit 0    


我帮你分析了一下你的情况:

你的脚本在 Jamf Self Service 点击执行时能正常运行(能创建 downloadfromjamf 文件夹并下载 DMG),
但在 Jamf 策略设置为联网时自动执行时,就失败了(目录没创建,文件没下载)。

这通常和 运行上下文(Context)不同 有关。


问题原因

  1. Self Service 执行 → 脚本在用户环境下执行($HOME、有 Desktop 路径、带 GUI)。

  2. 策略自动触发执行 → 脚本在 root 环境下执行,没有 $HOME 这个变量(或者 $HOME=/var/root),自然没有你期望的 ${HOME}/Desktop

所以:

  • ${HOME}/Desktoproot 环境下其实是 /var/root/Desktop,而不是你登录用户的桌面。

  • 自动策略下执行时,文件夹就不会出现在你想要的桌面路径。


解决方案

你需要在脚本里 明确指定当前登录用户的桌面路径,而不是用 $HOME。   OK 有大用

Jamf 推荐的写法是:

#!/bin/bash # 获取当前登录的用户   CURRENT_USER=$(stat -f %Su /dev/console) # 获取该用户的桌面路径 USER_HOME=$(dscl . -read /Users/$CURRENT_USER NFSHomeDirectory | awk '{print $2}') DESKTOP="$USER_HOME/Desktop" # 创建目录 /bin/mkdir -p "$DESKTOP/downloadfromjamf" chmod -R 777 "$DESKTOP/downloadfromjamf" cd "$DESKTOP/downloadfromjamf" # 下载文件 /usr/bin/curl -o "./LuxAI-1.1.2.dmg.zip" http://aaaa.bbbb.com/util/software/LuxAI-1.1.2.dmg.zip unzip -o "./LuxAI-1.1.2.dmg.zip" hdiutil attach "./LuxAI-1.1.2.dmg" sudo /bin/cp -a "/Volumes/LuxAI 1.1.2/LuxAI.app" /Applications/ hdiutil detach "/Volumes/LuxAI 1.1.2/" # 弹出提示框(必须以用户身份运行) su -l "$CURRENT_USER" -c '/usr/bin/osascript -e "display dialog \"成功安装Lux Ai,您可以删除桌面上的downloadfromjamf目录,如果打开Lux Ai出现错误,请重启电脑!\" buttons {\"OK\"} default button \"OK\""' # 安全设置 sudo spctl --master-disable sudo defaults write /Library/Preferences/com.apple.security GKAutoRearm -bool NO sudo xattr -r -d com.apple.quarantine "/Applications/LuxAI.app" sudo spctl --add --label "TrustedApp" /Applications/LuxAI.app sudo spctl --enable --label "TrustedApp" sudo killall Finder sudo killall SystemUIServer # 改权限 sudo chmod -R 777 "$DESKTOP/downloadfromjamf/" exit 0    




✅ 这样写后:

  • 不管是 Self Service 还是 自动触发策略,都会找到当前真正登录用户的桌面,而不是跑到 /var/root/Desktop

  • osascript 提示框也能正常弹出(因为用 su -l $CURRENT_USER 以用户身份执行)。


要不要我帮你精简一下脚本,把 curl + unzip + hdiutil + copy 部分封装成一个函数,避免重复出错?


普通分类: