推荐用 powershell 编写自动化脚本监控 windows 打印服务器队列健康状态,需综合 operationalstatus、jobstatus 和暂停标记判断,满足 online + 无 error/blocked 作业 + 未暂停才算健康,并通过事件日志、邮件和 csv 日志实现告警与记录,最后以任务计划程序定时执行。
windows 上监控打印服务器队列健康状态,推荐用 powershell 编写自动化脚本——它原生支持、无需额外安装,能直接调用打印管理模块获取实时队列信息。
获取所有打印队列状态
使用 Get-Printer 和 Get-PrintJob 获取基础状态。关键不是只看“是否在线”,而是结合队列作业数、错误状态、暂停标记综合判断:
-
Get-Printer -ComputerName "PrintServer01" 列出所有共享打印机及其
OperationalStatus(如 “Online”、“Offline”、“Paused”) - 对每个打印机运行 Get-PrintJob -PrinterName "HP-LaserJet-400" -ComputerName "PrintServer01" 查看当前排队作业;空队列但状态为 “Paused” 就属于异常
- 重点关注
JobStatus中的 “Error”、“Blocked”、“Deleting” 等非正常值,而非仅依赖队列长度
定义健康判定逻辑
健康 ≠ 队列为空。一个真正健康的队列应满足:状态为 Online + 无 Error/Blocked 作业 + 未被手动暂停。示例判断片段:
$printer = Get-Printer -Name "Finance-Printer" -ComputerName "PSRV"
$jobs = Get-PrintJob -PrinterName "Finance-Printer" -ComputerName "PSRV" -ErrorAction SilentlyContinue
$isHealthy = ($printer.OperationalStatus -eq "Online") -and
($printer.IsShared) -and
(-not $printer.IsPaused) -and
($jobs.JobStatus -notcontains "Error" -and $jobs.JobStatus -notcontains "Blocked")
自动告警与日志记录
发现不健康队列时,避免只弹窗或写屏幕——应写入事件日志并触发通知:
- 用 Write-EventLog 写入 Windows 应用程序日志,便于和现有监控系统(如 Zabbix、SCOM)集成
- 发邮件用 Send-MailMessage(需提前配置 SMTP 服务器),主题包含打印机名和具体异常项,例如:“⚠️ Finance-Printer 暂停且存在 Blocked 作业”
- 每次检查结果建议追加到本地 CSV 日志,含时间戳、打印机名、状态、作业数、是否告警,方便回溯趋势
部署为定时任务
保存脚本为 Check-PrintQueue.ps1,通过 Windows 任务计划程序每 5–15 分钟运行一次:
- 任务操作中“启动程序”填
powershell.exe,参数写-ExecutionPolicy Bypass -File "C:\Scripts\Check-PrintQueue.ps1" - 务必勾选“不管用户是否登录都要运行”并启用“不保存密码时只在交互式登录时运行”的替代选项(即配置为“仅当计算机处于空闲状态时运行”以外的模式)
- 测试阶段先手动右键运行脚本,确认无权限报错(常见于远程打印机访问需管理员权限或 WinRM 配置)











