我编写了一个脚本,以递归地遍历每个目录,查找word文件,并将“机密”附加到页脚。直到遇到一个加密文件导致脚本挂起,当我在密码提示上单击“取消”时,它才导致脚本崩溃,此操作一直很好。我试图 在打开文档之前检查文档是否已加密,但是提示仍然打开,这使脚本崩溃。有没有可靠的方法来检查文档是否受密码保护,并且可以在.doc和.docx文件上使用?我已经尝试过在另一个线程中使用该代码,并且前两种方法不起作用,第三种方法将每个文件检测为已加密,因为它会引发异常。
当前代码:
$word = New-Object -ComObject Word.Application
$word.Visible = $false
$files = Get-ChildItem -Recurse C:\temp\FooterDocuments -include *.docx,*.doc
$restricted = "CONFIDENTIAL"
foreach ($file in $files) {
$filename = $file.FullName
Write-Host $filename
try {
$document = $word.Documents.Open($filename, $null, $null, $null, "")
if($document.ProtectionType -ne -1) {
$document.Close()
Write-Host "$filename is encrypted"
continue
}
} catch {
Write-Host "$filename is encrypted"
continue
}
foreach ($section in $document.Sections) {
$footer = $section.Footers.Item(1)
$footer.Range.Characters.Last.InsertAfter("`n" + $restricted)
}
$document.Save()
$document.Close()
}
$word.Quit()