Windows 11下打印池为空时自动关闭打印池主机的实现方案咨询
Windows 11下打印池为空时自动关闭打印池主机的实现方案咨询
我完全理解你的需求——要让打印池主机在所有待打印任务都处理完毕、队列彻底清空时自动关机,而不是单个任务结束就触发操作。针对Windows 11环境,这里有两种实用的实现思路,帮你解决问题:
方案一:PowerShell脚本定时监控打印队列状态
这种方式直接可靠,通过定时检查打印队列的任务数来判断是否需要关机:
编写监控脚本
创建一个PowerShell脚本文件(比如命名为PrintQueueShutdown.ps1),内容如下,记得替换$queueName为你的打印池队列实际名称(可以在「设置-蓝牙和设备-打印机和扫描仪」中找到):# 替换为你的打印池队列名称 $queueName = "打印池队列名称" # 获取目标打印队列的当前状态 $printQueue = Get-Printer -Name $queueName | Get-PrintQueue # 第一次检查队列是否为空 if ($printQueue.NumberOfJobs -eq 0) { # 延迟10秒再次确认(避免任务刚完成的瞬时状态,防止误判) Start-Sleep -Seconds 10 $printQueue = Get-Printer -Name $queueName | Get-PrintQueue # 二次确认队列确实为空,执行关机 if ($printQueue.NumberOfJobs -eq 0) { Stop-Computer -Force } }如果你的打印池有多个队列,可以扩展脚本遍历所有队列,确保每个队列的任务数都为0再关机。
通过任务计划程序定时执行脚本
- 打开「任务计划程序」,点击「创建任务」(权限设置更灵活)。
- 触发器:选择「按预定计划」,设置执行间隔(比如每5分钟一次,根据你的打印频率调整);也可以选择「当打印事件发生时」作为触发条件,配合脚本检查。
- 操作:选择「启动程序」,程序/脚本填
powershell.exe,添加参数填-ExecutionPolicy Bypass -File "C:\你的脚本路径\PrintQueueShutdown.ps1"(替换为实际脚本路径)。 - 权限:在「常规」标签页勾选「不管用户是否登录都要运行」,并点击「更改用户或组」选择
SYSTEM账户,确保脚本有执行关机的权限。
方案二:结合事件查看器与任务计划程序,优化事件触发逻辑
你之前提到的单个任务完成日志可以作为触发点,但需要加上队列检查的逻辑,避免单个任务完成就关机:
配置任务触发器
- 打开事件查看器,定位到
应用程序和服务日志 > Microsoft > Windows > PrintService > Operational,找到事件ID为307的「任务已完成打印」事件。 - 右键该事件,选择「将任务附加到此事件」,打开任务计划程序的创建界面。
- 打开事件查看器,定位到
修改任务操作
- 不要直接设置关机操作,而是选择「启动程序」,调用上面编写的PowerShell脚本(参数和路径设置同方案一)。
- 这样每次有打印任务完成时,都会触发脚本检查队列状态,只有当所有任务都处理完毕、队列为空时,才会执行关机。
注意事项
- 测试阶段可以把脚本中的
Stop-Computer -Force换成Write-Host "队列已空,将执行关机",确认逻辑正确后再替换回关机命令。 - 如果遇到PowerShell脚本执行权限问题,确保使用
-ExecutionPolicy Bypass参数,或者临时调整执行策略(执行Set-ExecutionPolicy RemoteSigned,按提示确认)。
备注:内容来源于stack exchange,提问作者Yang
相关产品推荐
相关产品推荐

