如何检查word文件是否有密码?

时间:2013-06-30 10:42:23

标签: powershell ms-word passwords docx doc

我构建了一个脚本,可将.doc个文件转换为.docx

我遇到一个问题,当.doc文件受密码保护时,我无法访问它,然后脚本挂起。

我正在寻找一种在我打开它之前检查文件是否有密码的方法。

我使用Documents.Open方法打开文件。

2 个答案:

答案 0 :(得分:4)

如果您的脚本在打开文档时挂起,this question中列出的方法可能有所帮助,只有在PowerShell中您使用try..catch块而不是On Error Resume Next

$filename = "C:\path\to\your.doc"

$wd = New-Object -COM "Word.Application"

try {
  $doc = $wd.Documents.Open($filename, $null, $null, $null, "")
} catch {
  Write-Host "$filename is password-protected!"
}

如果您可以打开文件,但内容受到保护,您可以这样确定:

if ( $doc.ProtectionType -ne -1 ) {
  Write-Host ($doc.Name + " is password-protected.")
  $doc.Close()
}

如果这些都不起作用,您可能不得不诉诸this answer中描述的方法。粗略转换为PowerShell(检测加密文档的那些部分):

$bytes  = [System.IO.File]::ReadAllBytes($filename)
$prefix = [System.Text.Encoding]::Default.GetString($bytes[1..2]);

if ($prefix -eq "ÐÏ") {
  # DOC 2005
  if ($bytes[0x20c] -eq 0x13) { $encrypted = $true }

  # DOC/XLS 2007+
  $start = [System.Text.Encoding]::Default.GetString($bytes[0..2000]).Replace("\0", " ")
  if ($start -like "*E n c r y p t e d P a c k a g e") { $encrypted = $true }
}

答案 1 :(得分:0)

有一种概述here的技术。基本上,你提供一个假密码,没有密码的文件将被忽略;然后你错误地捕获那些需要密码的东西,并且可以跳过它们。