|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Очистка метаданных в файлах microsoft office |
|
PowerShell - Очистка метаданных в файлах microsoft office
|
Новый участник Сообщения: 36 |
Профиль | Отправить PM | Цитировать Уважаемые форумчане, возникла задача очистить личную информацию в файлах office, нашел пару программ, но работали они не идеально, основной проблемой было что они все меняли дату изменения файла, некоторые работали только со старыми форматами office, некоторые не запускались на серверной версии Windows.
Пришлось с помощью интернета написать скрипт (не очень хороший), который прилагаю ниже, но есть проблема - в 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 |
|
Отправлено: 06:32, 28-02-2019 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата kudrik_tt:
|
|
Отправлено: 07:26, 28-02-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 36
|
Профиль | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 09:42, 28-02-2019 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата kudrik_tt:
Мало того, что и так свойство .Visible имеет значение False по умолчанию, так его и ещё раз принудительно задают. И всё равно окна Word'а и PowerPoint'а видимы? Не верю. Цитата kudrik_tt:
|
||
Отправлено: 17:18, 28-02-2019 | #4 |
Новый участник Сообщения: 36
|
Профиль | Отправить PM | Цитировать Ваше удивление, оправдано, но, я думаю связано не с ...visible=$false, а то что эта функция не правильно обрабатывается, и выдает ошибку
Исключение при задании "visible" : "Не удается преобразовать значение "False" в тип "Microsoft.Office.Core.MsoTriState". Ошибка: "Недопустимое приведение "System.Boolean" к "Microsoft.Office.Core.MsoTriState"."" C:\Users\Администратор.WIN-RSML3SOA2AC\Desktop\Remove-ExcelDocumentInformation.ps1:77 знак:1 + $objPp.visible = $false + ~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], SetValueInvocationException + FullyQualifiedErrorId : ExceptionWhenSetting |
|
Отправлено: 13:34, 01-03-2019 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать kudrik_tt, я не пробовал исполнять код. Сейчас попробовал — таки да, именно так. Рекомендуют пользовать параметры метода .Open коллекции .Presentations.
|
Отправлено: 20:54, 01-03-2019 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Iska:
$oExcel = New-Object -ComObject 'Excel.Application' $oExcel.Visible = True "C:\Мои проекты\0248\Лист Microsoft Excel.xls", "C:\Мои проекты\0248\Лист Microsoft Excel 2.xls" |` ForEach-Object -Process { try { $oWorkbook = $oExcel.Workbooks.Open($_, $false, $false, 1, "") Write-Host $oWorkbook.Worksheets.Item(1).Cells(1, 1).Value() $oWorkbook.Close() } catch { Write-Host 'An error occurred.' } } $oExcel.Quit() |
|
Отправлено: 00:28, 02-03-2019 | #7 |
Новый участник Сообщения: 36
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Чтобы не открывалось окно PowerPoint - А вот чтобы не открывался word большая загадка, вроде все параметры верно, но вот если в строке изменить последнее $true на $false - программа не обрабатывает файлы, а $true как раз и отвечает за открытие (по умолчанию) в видимом режиме( |
|
Отправлено: 13:24, 05-03-2019 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать kudrik_tt, для Microsoft Word не нужно использовать данный механизм, он и так по умолчанию работает в невидимом окне.
|
Отправлено: 14:36, 05-03-2019 | #9 |
Новый участник Сообщения: 36
|
Профиль | Отправить PM | Цитировать С вордом, если честно все норм, а вот как powerpoint отучить останавливаться на паролях как Excel непонятно, так же как и у Excel по документам не сделаешь.
|
Отправлено: 06:07, 06-03-2019 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Ошибка - [решено] microsoft office 2003 не открывает файлы, сделанные в office 2010 | simsa | Microsoft Windows 2000/XP | 6 | 26-02-2016 15:58 | |
Microsoft собирается переименовать Office Web Apps в Office Online | OSZone News | Новости и события Microsoft | 0 | 28-01-2014 11:30 | |
Разное - Как конвертировать базу данных Microsoft Office Acess в Open office Base? | tier_skg | Хочу все знать | 0 | 08-01-2013 20:36 | |
Microsoft анонсирует выпуск бесплатной версии MS Office - Office Starter 2010 | OSZone News | Новости и события Microsoft | 0 | 10-10-2009 15:30 |
|