本文目录导读:

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服务
常见错误排查
- 打印机名称错误:先运行
lpstat -p或Get-Printer列出所有打印机 - 权限不足:Windows以管理员身份运行;macOS使用
sudo - 打印机未连接:确认打印机在线且驱动已正确安装
进阶:自动检测并设置
# PowerShell自动选择第一个可用打印机
$printer = Get-Printer | Where-Object {$_.Type -eq "Local"} | Select-Object -First 1
if ($printer) {
$printer.SetDefaultPrinter()
Write-Host "已设置默认打印机: $($printer.Name)"
}