【发布时间】:2017-11-03 03:35:17
【问题描述】:
我正在尝试从 .docx 文档批量创建 PDF 文档。无缘无故(文件权限相同,文件没有宏等)文件将挂起。我必须终止 Word 进程并强制关闭 PowerShell。
脚本在这里:
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string]$FilePath
)
$Files = Get-ChildItem -Recurse "$FilePath\*.docx"
$Word = New-Object -ComObject Word.Application
foreach ($File in $Files) {
# open a Word document, filename from the directory
$Doc = $Word.Documents.Open($File.FullName)
Write-Verbose "Test $($File.FullName)"
# Swap out DOCX with PDF in the Filename
$Name = ($Doc.FullName).Replace("docx","pdf")
# Save this File as a PDF in Word 2010/2013
$Doc.SaveAs([ref] [string]$Name, [ref] 17)
$Doc.Close()
}
这是 PowerShell 输出。你可以看到它挂在的文件:
它对大约 2-3% 的文件执行此操作。这看起来与here 发布的这个问题非常相似。但是,他们的解决方案并不能解决我的问题。
有人有什么建议吗?我也想知道是否有一种直观的方式来调试它。我看不到程序抛出任何错误。
【问题讨论】:
-
由于经常出现通用异常消息,从 PowerShell 中对 com 对象进行故障排除通常非常困难。
-
它是否每次都在同一个文件上崩溃,即表明文件存在一些内部差异/损坏?
-
是的,每次都是相同的文件。从根本上说,文件没有什么不同。它们是用相同版本的 word 创建的,它们都是相似的文件大小,没有宏等。
标签: powershell ms-word