怎么用脚本设置默认打印机

wen 实用脚本 2

本文目录导读:

怎么用脚本设置默认打印机

  1. Windows系统(PowerShell / CMD / VBScript)
  2. macOS系统(Bash / AppleScript)
  3. 跨平台脚本(Python)
  4. 注意事项

Windows系统(PowerShell / CMD / VBScript)

方法1:PowerShell(推荐)

# 使用WScript.Network COM对象
$printerName = "HP LaserJet Pro"
$network = New-Object -ComObject WScript.Network
$network.SetDefaultPrinter($printerName)
# 或者使用Win32_Printer(需要管理员权限)
$printer = Get-WmiObject -Query "SELECT * FROM Win32_Printer WHERE Name='$printerName'"
$printer.SetDefaultPrinter()

方法2:CMD批处理

@echo off
:: 使用RUNDLL32调用打印控制面板(不推荐,较难控制)
:: 更好的方法是使用PowerShell调用
powershell -Command "(New-Object -ComObject WScript.Network).SetDefaultPrinter('HP LaserJet Pro')"

方法3:VBScript

Set objNetwork = CreateObject("WScript.Network")
objNetwork.SetDefaultPrinter "HP LaserJet Pro"

macOS系统(Bash / AppleScript)

方法1:使用lpoptions命令

# 查看可用打印机
lpstat -p -d
# 设置默认打印机
lpoptions -d "打印机名称"
# 示例
lpoptions -d "Brother_HL-2270DW"

方法2:使用cupsctl(推荐,避免转义问题)

# 获取打印机URI
lpinfo -v
# 直接设置默认打印机
cupsctl DefaultPrinter="打印机名称"
systemctl restart cups  # 某些系统需要重启CUPS服务

方法3:AppleScript

tell application "System Events"
    set defaultPrinter to "HP LaserJet Pro"
    do shell script "lpoptions -d " & quoted form of defaultPrinter
end tell

跨平台脚本(Python)

import subprocess
import sys
import os
def set_default_printer_windows(printer_name):
    """Windows: 通过PowerShell设置"""
    ps_script = f"""
    $printer = Get-WmiObject -Query "SELECT * FROM Win32_Printer WHERE Name='{printer_name}'"
    $printer.SetDefaultPrinter()
    """
    subprocess.run(["powershell", "-Command", ps_script], check=True)
def set_default_printer_mac(printer_name):
    """macOS: 通过lpoptions设置"""
    subprocess.run(["lpoptions", "-d", printer_name], check=True)
# 使用示例
if sys.platform == "win32":
    set_default_printer_windows("HP LaserJet Pro")
elif sys.platform == "darwin":  # macOS
    set_default_printer_mac("Brother_HL-2270DW")
else:
    print("不支持的操作系统")

注意事项

Windows权限问题

  • 管理员权限:某些方法(如Win32_Printer)需要以管理员身份运行
  • 网络打印机:需确认打印机已连接且共享名正确

macOS特有问题

  • 打印机名称:必须使用lpstat -p显示的准确名称(可能含空格)
  • CUPS服务:更改后可能需要重启cups服务

常见错误排查

  1. 打印机名称错误:先运行lpstat -pGet-Printer列出所有打印机
  2. 权限不足:Windows以管理员身份运行;macOS使用sudo
  3. 打印机未连接:确认打印机在线且驱动已正确安装

进阶:自动检测并设置

# PowerShell自动选择第一个可用打印机
$printer = Get-Printer | Where-Object {$_.Type -eq "Local"} | Select-Object -First 1
if ($printer) {
    $printer.SetDefaultPrinter()
    Write-Host "已设置默认打印机: $($printer.Name)"
}

抱歉,评论功能暂时关闭!