Get-PrintJob获取打印作业不实时,如何实现数据刷新?
解决PowerShell获取虚拟打印机作业不实时更新的问题
以下是几种可行的解决方案:
改用WMI/CIM接口查询
Get-PrintJob有时会依赖缓存数据,改用底层的WMI/CIM类查询能获取更实时的打印作业信息:$machine = 'machine_name' $printer = 'auto_dummy_printer' Get-CimInstance -ComputerName $machine -ClassName Win32_PrintJob | Where-Object { $_.Name -like "*$printer*" } | Sort-Object -Property TimeSubmitted -Descending注意
Win32_PrintJob返回的Name字段格式为打印机名,作业ID,因此用-like模糊匹配更准确。强制刷新打印服务缓存
重启远程机器的打印后台处理服务(Spooler),可以强制刷新作业数据,但会中断当前所有打印任务,仅适合测试场景:Restart-Service -ComputerName $machine -Name Spooler -Force重启后再执行查询即可获取最新作业。
优化查询逻辑,触发缓存更新
在正式查询前先执行一次空查询,触发系统刷新打印作业缓存,再等待短暂时间后重新查询:$machine = 'machine_name' $printer = 'auto_dummy_printer' # 触发缓存刷新 Get-PrintJob -ComputerName $machine -PrinterName $printer | Out-Null Start-Sleep -Seconds 1 # 获取最新作业 Get-PrintJob -ComputerName $machine -PrinterName $printer | Sort-Object -Property SubmittedTime -Descending另外直接使用
Get-PrintJob的-PrinterName参数,能省去管道过滤步骤,提升效率。检查虚拟打印机驱动设置
部分虚拟打印机为了性能会延迟上报作业状态,进入打印机属性面板,查看是否有与状态更新频率相关的配置,调整为即时上报模式。
内容的提问来源于stack exchange,提问作者Jeremias Rößner
相关产品推荐
相关产品推荐

