Mac打印机一键安装

这篇具有很好参考价值的文章主要介绍了Mac打印机一键安装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 的文件,文件内容如下文章来源地址https://www.toymoban.com/news/detail-482262.html

#!/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='\033[0;31m'
GRN='\033[0;32m'
YELLOW="\033[0;33m"
BLU='\033[0;34m'
LIGHT_GRAY="\033[0;37m"
LIGHT_GREEN="\033[1;32m"
NC='\033[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 <<EOT
tell application "System Events"
    try
        do shell script "cd ./"
        return 1
    on error errorMessage number errorNumber
        return errorNumber
    end try
end tell
EOT
}
# End 判断是否开启了事件

# Start 密码输入窗口
function authPassword() {
    local authPass="${1}"
    /usr/bin/osascript <<EOT
on getAuthPass()
tell application "System Events"
    activate
    repeat
        with timeout of 86400 seconds
        display dialog "请输入您的电脑开机密码或锁屏密码后点击继续:" ¬
                        default answer "" ¬
                        with title "xxx打印机安装" ¬
                        with hidden answer ¬ 
                        buttons {"退出", "继续"} default button 2
    if button returned of the result is "退出" then
        return "exitapperk"
            exit repeat
    else if the button returned of the result is "继续" then
    set pswd to text returned of the result
            set usr to short user name of (system info)
    try
    do shell script "echo test" user name usr password pswd with administrator privileges
                do shell script "$(makeIniDir)"
    return pswd
                exit repeat
    end try
    end if
        end timeout

    end repeat
end tell
end getAuthPass

tell application "System Events"
    activate
        set pswd to text of the "${authPass}"
        set usr to short user name of (system info)
try
            do shell script "echo test" user name usr password pswd with administrator privileges
            return pswd
        on error
            my getAuthPass()
        end try
end tell
EOT
}

function setSudo() {
    authPass=$(authPassword "${1}")
    # 如果点击退出按钮,则中止
    if [ "$authPass" == "exitapperk" ]; then
        echo -e "${YELLOW}您未输入密码,正在为您取消本次安装。${NC}"
        closeTerminal
    else

        if [ -z "${authPass}" ]; then
            echo -e "\n\n"
            echo -e "${RED}无法读取您输入的密码,请在下方钥匙图标后输入您的电脑密码。${NC}(密码输入的过程中是看不到的,输入完成按下回车键)"
            echo
            read -s authPass
        fi

        local currentDate=$(date +%s)
        # 将密码写书入 ini 文件
        local writeinipass=$(writeIni $iniTmpDir/$iniTmpFile SYSTEM PASS "${authPass}" 2>/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 < 10000000)); do
          n=$((n + 1))
          echo -e "正在检测Rosetta工具是否已安装,第${n}次……"
          if [ ! -e "$rosetta_Path" ]; then
              echo
              echo -e "${LIGHT_GRAY}检测到未安装Rosetta工具,正在进行安装………${NC}"
              /usr/sbin/softwareupdate --install-rosetta --agree-to-license && \
              break
          else
            echo -e "${LIGHT_GRAY}检测到已经安装Rosetta工具,接下来检测是否接入内网.${NC}"
            break
          fi
      #     break
      done
fi
# 查询是否连接公司无线,如果不是则提醒用户连接Wi-Fi
current_wifi=$(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/AIrport -I | \
awk '/ SSID/ {print substr($0, index($0, $2))}')
# echo -e "${LIGHT_GRAY}正在查询你的网络状态,是否接入内网.${NC}" && \
if [[ "$current_wifi" == *temp  ]] || [[ "$current_wifi" == *Inc  ]] ;then
      sudo -- sh -c "installer -pkg $driverInstall -target /" && \
      #如果是其他型号的话则替换name即可
      driverPath=$(find $driverPath_init -name '*36C-9*' -maxdepth 1)
      # 循环读取 Print中的内容并且安装打印机
      for line in $infoContent;do
            name=$(echo "$line" | awk -F ',' '{ print $1}')
            ip=$(echo "$line" | awk -F ',' '{ print $2}')
            decide=$(echo "$line" | awk -F ',' '{ print $3}')
            # 生成该打印机的时候CUPS用来作为该打印机的文件名
            printername="$name"
            # 打印机的物理位置,比如说财务办公室,前台打印机等等,这个信息是可选的
            # location="$name"
            # 在GUI中显示的打印机名称
            gui_display_name="$name"
            # 打印机地址
            address="Socket://$ip"
            # 如果是禁用状态,并且电脑存在此打印机名的则删除,否则安装
            if [[ "$decide" == N ]] && lpstat -p "$name" -l > /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文件就是打印机驱动)
    Mac打印机一键安装
  • 我的代码中写了检测WiFi的,如果你们不需要就直接删了就行,需要的话则改成你们自己的WiFi名称。
  • 别的好像也没有什么要注意的了,有问题再说

到了这里,关于Mac打印机一键安装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 佳能打印机LBP2900 MAC电脑驱动解决方案-2023

    windows系统下的打印机接触不良,官网没有直接的mac驱动,翻了很多教程,最后成功了,写个帖子记录一下。 参考教程:Canon LBP 2900 Mac 10.11 驱动安装_lbp2900mac驱动程序_llcdefgab的博客-CSDN博客 ​​​​​​​MacOS Mojave/Catalina和Windows安装佳能LBP2900打印机驱动教程_佳能2900mac驱动

    2024年02月04日
    浏览(64)
  • Adobe打印机另存pdf出错生成log文件,打印失败

    用adobe打印机转pdf出错生成log文件,打印失败,log文件内容如下: 可能原因:打印文档字体问题,不更改文档内容,只需更改下PDF打印机设置即可。 在“设置”中,找到“设备和打印机”,找到“Adobe PDF”打印机,选择“管理”,如下图: 选择“打印首选项” 打开Adobe PDF打印

    2024年02月16日
    浏览(87)
  • 统信UOS 安装网络打印机驱动

    一、场景:UOS电脑(龙芯)和联想LJ3700打印机,分别连接路由(网关192.168.1.1)的不同LAN端口,为UOS电脑安装打印机驱动。UOS官网和联想打印机官网未见现成驱动。 二、安装步骤: 1、确定打印机IP。 2、用UOS自带“打印机管理”安装驱动。 三、安装过程: 1、查找打印机IP。

    2024年02月04日
    浏览(70)
  • 关于:在 Windows 10/11 中共享文件和打印机

    目录 1、启用相应服务和组件 2、共享文件夹设置 3、共享打印机设置 1)在【设置】中,打开【网络和 Internet】→【以太网】→【更改高级共享设置】:    

    2024年02月05日
    浏览(58)
  • 宝德银河麒麟系统打印机安装及共享方法(一)

    本文介绍的打印机连接方法适用于宝德“银河麒麟桌面操作系统V10(SP1)”(宝德PowerLeader;内核:linux5.4.18-35-generic,基于Ubuntu LTS版本;体系架构:ARM64),其他的Linux系统可以参考,方法类似。 本文分成三个部分: 一、银河麒麟系统安装打印机的一般方法; 二、安装特定厂家

    2023年04月08日
    浏览(147)
  • 惠普m1136打印机驱动程序安装教程

    惠普m113打印机是一款功能强大的多功能打印机,它能够打印、复印、扫描和传真等。如果你要使用这款打印机,你需要下载并安装驱动程序,以确保它能够在你的计算机上正常工作。在本文中,我们将介绍如何下载和安装惠普m1136打印机驱动程序。 一.惠普m1136打印机驱动 惠

    2024年02月09日
    浏览(65)
  • 宝德银河麒麟系统打印机安装及共享方法(二)

    本文介绍的打印机连接方法适用于宝德“银河麒麟桌面操作系统V10(SP1)”(宝德PowerLeader;内核:linux5.4.18-35-generic,基于Ubuntu LTS版本;体系架构:ARM64),其他的Linux系统可以参考,方法类似。 本文分成三个部分: 一、银河麒麟系统安装打印机的一般方法; 二、安装特定厂家

    2024年02月04日
    浏览(176)
  • 电脑添加夏普(sharp)打印机 从磁盘安装驱动过程

    今天打算连实验室的打印机,是夏普的,但是我不知道具体的型号。不过有一个word文档说明怎么连,大概率需要自己下载驱动,下面就开始吧! 前面都是一样的,控制面板–设备和打印机–添加打印机–手动添加–TCP/IP添加…… 选择TCP/IP并输入IP(打印机的IP可以在打印机那

    2024年02月10日
    浏览(48)
  • 安装打印机驱动程序的操作步骤,详细方法介绍

    安装打印机驱动程序是使用打印机的前提条件,因此学会正确的安装方法是非常重要的。下面是安装打印机驱动程序的详细步骤分析,为你全面的讲解安装和出现故障如何处理等问题。 一.安装打印机的准备工作 在安装打印机驱动程序之前,需要先准备好一些必要的工具和信

    2024年02月09日
    浏览(77)
  • 虚拟打印机开源项目clawPDF最新版本在Windows+Visual Studio 环境编译运行遇到的若干问题,以及虚拟打印机驱动的安装和彻底卸载详细图文步骤

    虚拟打印机开源项目clawPDF最新版本在Windows+Visual Studio 环境编译运行遇到的若干问题,以及虚拟打印机驱动的安装和彻底卸载详细图文步骤。 错误提示: 不支持此版本的 Visual Studio 无法打开以下项目。可能未安装项目类型,或此版本的 Visual Studio 可能不支持项目类型。 有关

    2024年02月22日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包