1、创建文件夹
创建文件夹主要是为了后面东西打包方便。名字随意。我这里创建名为:Macos
2、下载打印机驱动
打印机驱动格式一般是pkg格式,其他格式的暂未测试,如果是其他格式的可以直接看我的代码怎么写的参考一下我的逻辑。
3、创建配置文件
注意‼️:在刚才创建的文件夹下午创建,这一步创建的主要用作于存放打印机的一些信息的,分别为:打印机名称,ip地址,是否启用
参考一下我的示例,我在 Macos 文件夹下创建了一个无扩展名的文件,叫:Print。信息如下
打印机名称,ip地址,是否启用
杭州3L黑白,172.19.2.3,Y
杭州4L黑白,172.19.2.4,Y
杭州5L黑白,172.19.2.5,Y
杭州11L黑白,172.18.2.99,N
北京一楼零食区,172.16.24.11,N
北京HR办公室,172.16.3.161,N
4、创建密码文件
这一步是创建ini的配置文件,用于存密码的。创建文件名:
apperk-config.ini
,文件内容如下
[SYSTEM]
PASS=""
DATE=""
DESCRIPTION="将输入的密码记录在临时目录中,防止安装重复输入密码,一般情况下重启电脑就会被自动清理"
5、写安装脚本
创建一个 名为:
install.sh
的文件,文件内容如下
#!/bin/bash
#- - - - - - - - -- --Script comment information - - - - - - - - - -
#Author: 拉基
#Email: helpdesk811@outlook.com
#Creation time: 2022-10-18
#FileName: temp.sh
#Blog address: https://www.cnblogs.com/98record/
#Copyright (C) 2022All rights reserved
#- - - - - - - - - - - - - end - - - - - - - - - - - - - - - - - -
clear
RED='33[0;31m'
GRN='33[0;32m'
YELLOW="33[0;33m"
BLU='33[0;34m'
LIGHT_GRAY="33[0;37m"
LIGHT_GREEN="33[1;32m"
NC='33[0m'
# 密码加密密钥
key="6d6163776b2e636f6d2d6d6163776b2d636f6d2f6dd163776b21136f12"
iv="3534363122333334"
# 定义一个初始目录路径
###=================================
### 获取当前目录
###=================================
parentPath=$(
cd "$(dirname "$0")"
pwd -P
)
### 进入当前目录
cd "$(dirname "$0")"
echo
# 驱动安装程序路径
driverInstall=$( find "$parentPath" -name '*.pkg' -maxdepth 1)
# 本机驱动程序包地址,这是苹果打印机固定地址
driverPath_init="/Library/Printers/PPDs/Contents/Resources/"
# 获取任何来源状态
spctlStatus=$(spctl --status 2>/dev/null)
# 打印机信息路径
infoPath=$( find "$parentPath" -name 'Print' -maxdepth 1)
infoContent=$(awk -F ',' 'NR!=1 { print }' "$infoPath")
# 判断是不是m1型号
cpuinfo=$(sysctl -n machdep.cpu.brand_string)
rosetta_Path="/Library/Apple/usr/share/rosetta/rosetta"
# ini 配置文件目录
iniTmpDir=/tmp/apperk-config/
iniTmpFile=apperk-config.ini
echo -e "${LIGHT_GREEN}>${NC}『xxx打印机』自动安装器"
echo -e "${BLU}如安装有问题请截图联系IT-help处理${NC}"
# Start 关闭 Terminal 窗口
function closeTerminal() {
if [ "${1}" ]; then
delayValue="${1}"
else
delayValue=1
fi
if [ "$TERM_PROGRAM" == "Apple_Terminal" ]; then
osascript -e 'delay '"${delayValue}"
osascript -e 'tell application "Terminal" to close first window' &
exit
else
osascript -e 'delay '"${delayValue}"
exit
fi
}
# End 关闭 Terminal 窗口
# Start 读取写入 ini 配置文件
function readIni() {
file="${1}"
section="${2}"
item="${3}"
val=$(awk -F '=' '/['${section}']/{a=1} (a==1 && "'${item}'"==$1){a=0;print $2}' ${file})
password=$(echo "${val}" | sed 's/^"//' | sed 's/"$//')
password_pre="${password:0:7}"
if [ "${password_pre}" == "apperk-" ]; then
decrypt_str=$(echo "${password:7}==" | openssl enc -e -aes-256-cbc -a -K ${key} -iv ${iv} -nosalt -d 2>/dev/null)
echo ""${decrypt_str}""
else
echo "${password}"
fi
}
function writeIni() {
file="${1}"
section="${2}"
item="${3}"
val="${4}"
if [ "${item}" == "PASS" ]; then
encrypt_str="apperk-$(echo "${val}" | openssl enc -e -aes-256-cbc -a -K ${key} -iv ${iv} -nosalt 2>/dev/null)"
else
encrypt_str="${val}"
fi
awk -F '=' '/['${section}']/{a=1} (a==1 && "'${item}'"==$1){gsub($2,""'"${encrypt_str}"'"");a=0} {print $0}' ${file} 1${file}
}
# End 读取写入 ini 配置文件
# Start 判断是否开启了事件
function testSystemEvents() {
/usr/bin/osascript /dev/null)
local writeinidate=$(writeIni $iniTmpDir/$iniTmpFile SYSTEM DATE ${currentDate} 2>/dev/null)
# 代替sudo命令的函数
sudo() {
/bin/echo "${authPass}" | /usr/bin/sudo -S "$@"
}
sudo -- sh -c "chmod 777 $iniTmpDir/$iniTmpFile" &>/dev/null
sudo -- sh -c "chmod 777 $iniTmpDir/*" &>/dev/null
fi
}
# End 密码输入窗口
# Start 创建配置目录
function makeIniDir() {
# 将 ini 配置文件复制到 临时文件/tmp 目录
rm -rf "${iniTmpDir}" &>/dev/null
mkdir -p "${iniTmpDir}" &>/dev/null
cp -a "${parentPath}/${iniTmpFile}" "${iniTmpDir}" &>/dev/null
}
# End 创建配置目录
function countDown() {
secs=$1
shift
while [ $secs -gt 0 ]; do
printf "r本窗口 %.d 秒后自动关闭" $((secs--))
sleep 1
done
}
if [ $(testSystemEvents) == '-1743' ]; then
echo -e "${YELLOW}您未授权自动化请求!${NC}请前往${CYAN}「系统偏好设置 -> 安全性与隐私 -> 隐私 -> 自动化」${NC}中${GREEN}勾选「终端」${NC}项下面的${GREEN}「System Events」${NC},然后重新安装。"
echo
countDown 20
echo
closeTerminal
fi
if [ -f "${iniTmpDir}/${iniTmpFile}" ]; then
# 读取 ini 配置文件中的密码
iniPass="$(readIni ${iniTmpDir}/${iniTmpFile} SYSTEM PASS)"
iniDate="$(readIni ${iniTmpDir}/${iniTmpFile} SYSTEM DATE)"
currentDate=$(date +%s)
if [[ "${iniPass}" ]] && [[ "${iniDate}" ]]; then
#超过6个小时重新获取密码
if [ $(($currentDate - $iniDate)) -gt 21600 ]; then
makeIniDir
# 获取密码
setSudo
else
# 传递密码
setSudo "${iniPass}"
fi
else
makeIniDir
# 获取密码
setSudo
fi
else
makeIniDir
# 获取密码
setSudo
fi
# Start 判断 AppleScript 授权状态
# End 判断 AppleScript 授权状态
# End 判断是否存在配置文件
if [[ ${spctlStatus} == *"enabled"* ]]; then
echo -e "${LIGHT_GRAY}您系统当前不允许运行非 App Store 安装的软件,${NC}正在为您开启任何来源"
sudo -- sh -c "spctl --master-disable &>/dev/null"
fi
if [[ "$cpuinfo" == Apple* ]] ;then
n=0
while (($n /dev/null 2>&1;then
lpadmin -x "$name" > /dev/null 2>&1
elif [[ "$decide" == Y ]];then
# echo $driverPath
# 添加打印机
# echo "不存在并且启用打印机: $name"
/usr/sbin/lpadmin
-p "${printername}"
-D "${gui_display_name}"
-v "${address}"
-P "${driverPath}"
-o printer-is-shared=false
-E > /dev/null 2>&1
fi
done
if [ $? -eq 0 ];then
echo -e "${RED}打印机名带彩色字样的则支持彩色打印,黑白字样则不支持彩色打印${NC}n${GRN}安装完成,正在关闭本窗口……${NC}n"
hdiutil detach -force "${parentPath}" &>/dev/null
sleep 4 &&
# osascript -e "do Shell script "osascript -e \"tell application \\\"Terminal\\\" to quit\" &> /dev/null &""; exit
closeTerminal
else
echo "${RED}安装失败请截图联系it-help${NC}"
fi
else
# 使用Mac 弹窗告警功能,提示员工需要连接公司内网Wi-Fi
osascript -e 'tell application (path to frontmost application as text) to display dialog "请使用temp或Inc后缀 Wi-Fi 后重新运行此安装脚本" buttons {"OK"} with icon stop' &&
# osascript -e "do Shell script "osascript -e \"tell application \\\"Terminal\\\" to quit\" &> /dev/null &""; exit
hdiutil detach -force "${parentPath}" &>/dev/null &&
closeTerminal
fi
注意事项‼️
- 操作完后文件夹中应该是下面图片这个样子(pkg文件就是打印机驱动)
- 我的代码中写了检测WiFi的,如果你们不需要就直接删了就行,需要的话则改成你们自己的WiFi名称。
- 别的好像也没有什么要注意的了,有问题再说