Удаление метаданных документа Word. Часть 2 - PowerShell

Удаление метаданных документа Word. Часть 2 - PowerShell

https://t.me/AnyIntCrap


Приветствую, с Вами канал Всякие Интересности, и сегодня мы продолжим чистить метаданные из документа MS Word.

На просторах интернета был найден скрипт на PowerShell и успешно протестирован. Не стоит пугаться слов скрипт и PowerShell, кто не знает, всё предельно просто. Поехали.

Переходим на этот сайт и копируем скрипт, или не переходим и копируем скрипт в конце статьи.

Далее нам нужно запустить командную строку от имени администратора и набрать powershell, после Enter.

Чтобы это сделать существует несколько способов:

1) Нажать кнопку Win, в поиске написать cmd и нажать сочетание клавиш Ctrl+Shift+Enter.

2) В поиске найти Командная строка, правой кнопкой мыши (ПКМ), запустить от имени Администратора.

3) Тот, кто работает под администратором, как я, следует нажать сочетание клавиш Win+R, ввести cmd и нажать Enter.

Нашему взору предстанет окно командной строки.

Вводим powershell.

После, наш (но по факту не наш :D) скопированный скрипт вставить в командную строку.

Нас интересует первая строка скрипта, та, в которой задаётся путь к файлам, которые надо очистить.

Тут нас автор скрипта информирует:

Скрипт ищет все подпапки в указанной папке с глубиной 1, и для каждой папки отдельно ищет в цикле все файлы, это сделано для того, что если у вас в папке будут десятки или сотни тысяч файлов, powershell просто вылетит, так и не найдя файлы. А при таком подходе не будет переполнения размера массива и вылетов. Скрипт не обрабатывает ошибки открытия файлов доступных только на чтение, запароленных, т.е. всех тех при открытии которых выскакивает какое-либо окошко

Если нам надо удалить метаданные из определённой папки, то задаём путь до папки в которой лежит наша папка с док-ми. Т.е. если у нас файлы, которые надо очистить находятся в папке "по работе" в подпапке "отчёты" на диске D, то задаём следующий путь: D:\по работе\

Что ж, давайте подставим наш путь в скрипт и запустим, во время выполнения скрипта MS Word будет открывать и закрывать документ данные которого будут чиститься.

Чтобы не задавать путь вручную, просто "идём" до папки с нашими док-ми, не открывая её. Зажимаем Shift, ПКМ и Копировать как путь (в конце названия папки поставить косую черту (слэш) \) P.S. наклон черты имеет значение.

Запускаем скрипт.

Смотрим сведения документа:

Всё чисто.

Код:

$StartPath = "ВАШ ПУТЬ"

$pathAll = Get-ChildItem -Name -Path $StartPath -Exclude *.*

$Errors = 0

$iterator = 1

$countAll = $StartPath.length

foreach($path in $pathAll)

{

$path=$StartPath+$path

Write-Host "Составляю список файлов *.doc, *.docx в папке $path"

Add-Type -AssemblyName Microsoft.Office.Interop.Word

$WdRemoveDocType = "Microsoft.Office.Interop.Word.WdRemoveDocInfoType" -as [type]

$wordFiles = Get-ChildItem -Path $path -include *.doc, *.docx -recurse

$objword = New-Object -ComObject word.application

$i = 1

$wordFileslength = $wordFiles.length

$count = $wordFiles.length

"Найдено Word файлов: $wordFileslength"

$objword.visible = $false

foreach($obj in $wordFiles)

{

$progressBar = [int]($i*100/$count)

try{

$documents = $objword.Documents.Open($obj.fullname)

“$i / $count ($progressBar%) Удаляю метаданные из $obj”

$i = $i + 1

$documents.RemoveDocumentInformation($WdRemoveDocType::wdRDIAll)

$documents.Save()

$objword.documents.close()

}

catch{

Write-Host "Ошибка очистки метаданных в $obj"

$Errors = $Errors + 1

}

}

$objword.Quit()

$progressBarAll = [int]($iterator*100/$countAll)

Write-Host "Удаление метаданных в $path завершено в папках: $iterator / $countAll ($progressBarAll%)"

$iterator = $iterator +1

}

Write-Host "Удаление метаданных завершено! Ошибок: $Errors"



Спасибо за внимание!!!

С вами был канал Всякие Интересности

Report Page