U
U
Uncle Seryozha2016-08-24 07:11:32
Information Security
Uncle Seryozha, 2016-08-24 07:11:32

How to clear metadata in documents?

How to clear metadata in documents?
How to remove metadata from office documents? (docx, doc)
There are a bunch of gigabytes of MS Office documents on the server, how can I clear the metadata?
I found MetadaCleaner 3 (Document metada cleaner), but it can't work with docX, xlsX, etc., and crashes with a lot of files. The old version does not seem to crash, but there are also unclear errors.
SOLUTION for doc and docx:

#Скрипт ищет все подпапки в указанной папке с глубиной 1, и для каждой папки отдельно
#ищет в цикле все файлы, это сделано для того, что если у вас в папке будут десятки или
#сотни тысяч файлов, powershell просто вылетит, так и не найдя файлы. А при таком подходе
#не будет переполнения размера массива и вылетов.
#Скрипт не обрабатывает ошибки открытия файлов доступных только на чтение, запароленных,
#т.е. всех тех при открытии которых выскакивает какое-либо окошко
$StartPath = "c:\"
$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"

Answer the question

In order to leave comments, you need to log in

1 answer(s)
E
Eugene, 2016-08-24
@Protos

https://blogs.technet.microsoft.com/heyscriptinggu...
This is an example for Excel
in the comments to the article there is a link to a working example with word.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question