Пришлось с помощью интернета написать скрипт (не очень хороший), который прилагаю ниже, но есть проблема - в excel, если попадается файл с паролем, то excel открывает его и ждет, ввода пароля, можно ли как то сделать, чтобы просто автоматически эти файлы или пропускались или закрывались? Если файлы excel обрабатываются не открываясь, то word и powerpoint почему то открываются, обрабатываются и закрываются, это обязательно? или можно как то поправить, я не большой специалист по Powershell, обычно использую его для отчетов по резервному копированию, да очистки временных файлов.
вот скрипт:
Код:
Код: Выделить всё
#Очистка медаданных у файлов Excel
$path = "D:\test\"
$Date = Get-Date -Format "dd.MM.yyyy"
New-Item -Path $PSScriptRoot\MataData -ItemType Directory
Add-Type -AssemblyName Microsoft.Office.Interop.Excel
$xlRemoveDocType = "Microsoft.Office.Interop.Excel.XlRemoveDocInfoType" -as [type]
$excelFiles = Get-ChildItem -Path $path -include *.xls, *.xlsx, *.xlsm -recurse
$objExcel = New-Object -ComObject excel.application
$objExcel.visible = $false
$objExcel.displayalerts = $false
$Errors = 0
$i = 0
"Файлы с удаленной информацией:" | Out-File -FilePath $PSScriptRoot\MataData\logXl-$Date.txt
"Ошибка очистки метаданных:" | Out-File -FilePath $PSScriptRoot\MataData\error-$Date.txt
foreach($dxl in $excelFiles)
{
try{
$dateCreXl = $dxl.CreationTime
$dateLastXl = $dxl.LastWriteTime
$docXl = $objExcel.workbooks.open($dxl.fullname)
#$objExcel.displayalerts = $false
"$dxl" | Out-File -FilePath $PSScriptRoot\MataData\logXl-$Date.txt -Append
$i = $i + 1
$docXl.RemoveDocumentInformation($xlRemoveDocType::xlRDIAll)
$docXl.Save()
$objExcel.ActiveWorkbook.close()
$dxl.CreationTime = $dateCreXl
$dxl.LastWriteTime = $dateLastXl
}
catch{
"$dxl" | Out-File -FilePath $PSScriptRoot\MataData\error-$Date.txt -Append
$Errors = $Errors + 1
}
}
$objExcel.Quit()
"Удаление метаданных в файлах Excel завершено! Колличество обработанных файлов - $i; Ошибок: $Errors" | Out-File -FilePath $PSScriptRoot\MataData\logXl-$Date.txt -Append
"Удаление метаданных в файлах Excel завершено! Колличество обработанных файлов - $i; Ошибок: $Errors" | Out-File -FilePath $PSScriptRoot\MataData\error-$Date.txt -Append
#Очистка медаданных у файлов Word
$path = "D:\test\"
Add-Type -AssemblyName Microsoft.Office.Interop.Word
$WdRemoveDocType = "Microsoft.Office.Interop.Word.WdRemoveDocInfoType" -as [type]
$wordFiles = Get-ChildItem -Path $path -include *.doc, *.docx, *.docm -recurse
$objWord = New-Object -ComObject word.application
$objWord.visible = $false
$Errors = 0
$i = 0
"Файлы с удаленной информацией:" | Out-File -FilePath $PSScriptRoot\MataData\logW-$Date.txt
foreach($dwr in $wordFiles)
{
try{
$dateCreW = $dwr.CreationTime
$dateLastW = $dwr.LastWriteTime
$docW = $objWord.Documents.Open($dwr.fullname)
#$objWord.CheckCompatibility = $false
"$dwr" | Out-File -FilePath $PSScriptRoot\MataData\logW-$Date.txt -Append
$i = $i + 1
$docW.RemoveDocumentInformation($WdRemoveDocType::wdRDIAll)
$docW.Save()
$objWord.documents.close()
$dwr.CreationTime = $dateCreW
$dwr.LastWriteTime = $dateLastW
}
catch{
"$dwr" | Out-File -FilePath $PSScriptRoot\MataData\error-$Date.txt -Append
$Errors = $Errors + 1
}
}
$objWord.Quit()
"Удаление метаданных в файлах Word завершено! Колличество обработанных файлов - $i; Ошибок: $Errors" | Out-File -FilePath $PSScriptRoot\MataData\logW-$Date.txt -Append
"Удаление метаданных в файлах Word завершено! Колличество обработанных файлов - $i; Ошибок: $Errors" | Out-File -FilePath $PSScriptRoot\MataData\error-$Date.txt -Append
#Очистка медаданных у файлов PowerPoint
$path = "D:\test\"
Add-Type -AssemblyName Microsoft.Office.Interop.PowerPoint
$PpRemoveDocType = "Microsoft.Office.Interop.PowerPoint.PpRemoveDocInfoType" -as [type]
$PpFiles = Get-ChildItem -Path $path -include *.ppt, *.pptx, *.pptm -recurse
$objPp = New-Object -ComObject Powerpoint.application
$objPp.visible = $false
$Errors = 0
$i = 0
"Файлы с удаленной информацией:" | Out-File -FilePath $PSScriptRoot\MataData\logPp-$Date.txt
foreach($pp in $PpFiles)
{
try{
$dateCrePp = $pp.CreationTime
$dateLastPp = $pp.LastWriteTime
$docPp = $objPp.Presentations.Open($pp.fullname)
#$objPp.displayalerts = $false
"$pp" | Out-File -FilePath $PSScriptRoot\MataData\logPp-$Date.txt -Append
$i = $i + 1
$docPp.RemoveDocumentInformation($PpRemoveDocType::ppRDIAll)
$docPp.Save()
$docPp.close()
$pp.CreationTime = $dateCrePp
$pp.LastWriteTime = $dateLastPp
}
catch{
"$pp" | Out-File -FilePath $PSScriptRoot\MataData\error-$Date.txt -Append
$Errors = $Errors + 1
}
}
$objPp.Quit()
"Удаление метаданных в файлах PowerPoint завершено! Колличество обработанных файлов - $i; Ошибок: $Errors" | Out-File -FilePath $PSScriptRoot\MataData\logPp-$Date.txt -Append
"Удаление метаданных в файлах PowerPoint завершено! Колличество обработанных файлов - $i; Ошибок: $Errors" | Out-File -FilePath $PSScriptRoot\MataData\error-$Date.txt -AppendБольшое спасибо за помощь!