如何用PowerShell指定打印机打印Word文档且不修改默认打印机?
解决指定打印机打印Word文档且不修改默认打印机的方法
直接设置$objWord.ActivePrinter会覆盖系统默认打印机,解决方案是先保存当前默认打印机,打印完成后再恢复。修改后的代码如下:
# 获取当前系统默认打印机 $defaultPrinter = Get-CimInstance Win32_Printer | Where-Object { $_.Default -eq $true } $objWord = New-Object -ComObject word.application $objWord.Visible = $False $Path = "$root\UNB\TMP\$archivo.docx" $objDoc = $objWord.Documents.Open("$Path") try { # 设置Word使用指定打印机 $objWord.ActivePrinter = "IMP_TIQUETE" # 执行打印并等待完成 $objDoc.PrintOut() while ($objWord.BackgroundPrintingStatus -ne 0) { Start-Sleep -Seconds 1 } } finally { # 恢复系统默认打印机(确保获取到默认打印机才执行) if ($defaultPrinter) { $defaultPrinter.SetDefaultPrinter() } # 关闭文档并退出Word $objDoc.Close([ref]0, [ref]$null, [ref]$null) $objWord.Quit() # 清理COM对象,避免后台残留Word进程 [System.Runtime.Interopservices.Marshal]::ReleaseComObject($objDoc) | Out-Null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($objWord) | Out-Null [System.GC]::Collect() [System.GC]::WaitForPendingFinalizers() } Remove-Item $root\UNB\TMP\$archivo.docx -Force
核心要点:
- 保存+恢复默认打印机:通过
Get-CimInstance抓取当前默认打印机,打印完成后调用SetDefaultPrinter()还原设置,避免影响系统全局默认值。 - try/finally块保障:即使打印过程中出现异常,也能确保打印机设置恢复和资源清理,防止资源泄漏。
- COM对象清理:手动释放Word相关的COM对象并触发垃圾回收,避免后台残留未关闭的Word进程。
内容的提问来源于stack exchange,提问作者Juan Manuel Sanchez
相关产品推荐
相关产品推荐

