You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:15:55