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

如何在PowerShell脚本中调用MS Word原生打印对话框

解决方案

直接通过Word COM对象内置的Dialogs接口即可唤起原生打印对话框,无需使用Start-Process调用外部指令:

  • 你之前用的Start-Process -FilePath .\test.docx -Verb Print触发的是Word的快捷打印动作,默认直接将任务发送到默认打印机,不提供交互界面,所以会出现窗口闪一下就关闭的情况
  • 不要在弹出打印窗口前执行$Word.Quit()和COM资源释放逻辑,必须等用户完成打印交互后再做清理
  • Word内置的wdDialogFilePrint对话框(枚举值为88)就是你需要的原生打印界面,调用其Show()方法即可弹出,支持所有Word自带的打印配置项。
修正后的可运行脚本
$Word = New-Object -ComObject Word.Application
# 必须设置Word可见,否则可能出现对话框无法前台显示、后台进程残留的问题
$Word.Visible = $true
$Document = $Word.Documents.Add()
$Selection = $Word.Selection

# 原有文档编辑逻辑
$Selection.Font.Size = 16
$Selection.Font.Bold = 1
$Selection.TypeText("DATA")
$Selection.Font.Bold = 0
$Selection.Font.Size = 12
$Selection.TypeParagraph()
$Selection.TypeText("Name: `vLast Name:")

$Report = Join-Path $PSScriptRoot "test.docx"
# 修复原脚本未定义SaveFormat枚举的问题,传值16对应标准docx格式(wdFormatXMLDocument)
$Document.SaveAs([ref]$Report, [ref]16)

# 唤起Word原生打印对话框
$printDialog = $Word.Dialogs.Item(88)
# 脚本会阻塞在这里,直到用户关闭打印对话框(点确认打印/取消)
$null = $printDialog.Show()

# 交互完成后再退出Word、清理COM资源
$Word.Quit()
$null = [System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$Word)
[gc]::Collect()
[gc]::WaitForPendingFinalizers()
Remove-Variable Word
其他说明
  • 弹出的对话框就是Word自带的传统打印窗口,支持选打印机、设置页码范围、打印份数、双面打印、缩放等所有原生功能,和你手动在Word里点文件-打印弹出的界面完全一致。
  • 如果需要预设打印参数,可以在调用Show()前给$printDialog的对应属性赋值,比如要默认设置2份打印,加一行$printDialog.Copies = 2即可。
  • 如果需要判断用户是点击了「打印」还是「取消」,可以判断$printDialog.Show()的返回值:返回-1代表用户确认打印,返回0代表用户点击取消。

内容的提问来源于stack exchange,提问作者lucaortis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:57:23