Word обход файлов, защищенных паролем - PullRequest
0 голосов
/ 05 ноября 2018

НАЗНАЧЕНИЯ

Сценарий должен выполнять итерацию по каждому файлу в папке, преобразовывать его в .txt и загружать текст в базу данных Azure

ПРОБЛЕМА

Все работает до тех пор, пока не попадет в защищенный паролем файл, я просто хочу пропустить эти файлы. Я запускаю это на сотнях тысяч документов, и сценарий будет останавливаться, если он попадет в файл, защищенный паролем, пока вы не введете пароль или не нажмете Отмена.

SCRIPT

Write-Output "Processing: $($file)"
Try {
    $doc = $word.Documents.OpenNoRepairDialog($file)
}
Catch {

}

if ($doc) {
    $fileName = [io.path]::GetFileNameWithoutExtension($file)
    $fileName = $filename + ".txt"
    $doc.SaveAs("$env:TEMP\$fileName", [ref]$saveFormat)
    $doc.Close()


    $4ID = $fileName.split('-')[-1].replace(' ', '').replace(".txt", "")
    $text = Get-Content -raw "$env:TEMP\$fileName"
    $text = $text.replace("'", "")

    $query += "
    ('$text', $4ID),"
    Remove-Item -Force "$env:TEMP\$fileName"
}

РЕШЕНИЕ

Для тех, у кого возникла та же проблема, решение было передать непустую строку в открытый вызов, например:

$wd.Documents.Open($file, $false, $falsel, $false, "ttt")

вместо

$wd.Documents.Open($file, $false, $falsel, $false, "")

1 Ответ

0 голосов
/ 05 ноября 2018

Вот демонстрационный скрипт, показывающий, защищен ли документ Word в текущем каталоге паролем. Если открытие файла не запускается блоком catch, продолжайте логику в блоке try.

$wd = New-Object -ComObject Word.Application

$scriptpath = $MyInvocation.MyCommand.Path
$dir = Split-Path $scriptpath
$files = Get-ChildItem $dir -Include *.doc, *.docx -Recurse

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

Вам нужно будет интегрировать оставшуюся логику, если вы выберете этот подход, но он показывает общую идею проверки файлов, защищенных паролем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...