Featured image of post Как массово удалить метаданные (личную информацию) из Excel, Word и других файлов с помощью PowerShell

Как массово удалить метаданные (личную информацию) из Excel, Word и других файлов с помощью PowerShell

Как массово удалить метаданные (личную информацию) из Excel, Word и других файлов с помощью PowerShell

Файлы Office, такие как Excel, автоматически сохраняют «метаданные (личную информацию)», включая автора, того, кто последним вносил изменения, и название компании. Часто возникают ситуации, когда необходимо удалить эту информацию, например, при обмене файлами за пределами компании.

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


1. Удаление метаданных из одного файла Excel

Это самый базовый скрипт для удаления личной информации из одного файла Excel. Он вызывает COM-объект Excel, устанавливает свойство RemovePersonalInformation в $true и сохраняет изменения.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# Запуск приложения Excel в скрытом режиме
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false

# Открытие файла (* укажите абсолютный путь)
$filePath = "C:\Path\To\Your\File.xlsx"
$wb = $excel.Workbooks.Open($filePath)

# Включение настройки для удаления метаданных (личной информации)
$wb.RemovePersonalInformation = $true

# Сохранение с перезаписью и закрытие
$wb.Save()
$wb.Close($false)

# Закрытие Excel и освобождение памяти
$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null

Примечание: Для пути, передаваемого в Workbooks.Open(), обязательно укажите абсолютный путь (полный путь). Использование относительного пути может привести к ошибке.


2. Массовая обработка всех файлов Excel в папке

На практике часто возникает необходимость «сразу удалить метаданные из десятков файлов Excel в определенной папке». Это можно реализовать с помощью цикла в сочетании с Get-ChildItem.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$targetFolder = "C:\Path\To\Your\Folder"

# Получение всех файлов .xlsx и .xls в папке
$excelFiles = Get-ChildItem -Path $targetFolder -Include "*.xlsx", "*.xls" -Recurse

if ($excelFiles.Count -eq 0) {
    Write-Host "Файлы Excel не найдены."
    exit
}

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false

foreach ($file in $excelFiles) {
    Write-Host "Удаление метаданных из $($file.Name)..."
    
    # Открытие файла
    $wb = $excel.Workbooks.Open($file.FullName)
    
    # Удаление метаданных и сохранение с перезаписью
    $wb.RemovePersonalInformation = $true
    $wb.Save()
    $wb.Close($false)
}

$excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null

Write-Host "Вся обработка завершена!"

3. Удаление метаданных из других файлов Office (Word / PowerPoint)

Метаданные можно удалить не только в Excel, но и в Word или PowerPoint, используя точно такую же логику. Отличается только имя вызываемого COM-объекта, а наличие свойства RemovePersonalInformation остается общим.

Для Word

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$word = New-Object -ComObject Word.Application
$word.Visible = $false
$word.DisplayAlerts = 0

$doc = $word.Documents.Open("C:\Path\To\Your\File.docx")
$doc.RemovePersonalInformation = $true
$doc.Save()
$doc.Close()

$word.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null

Для PowerPoint

В случае PowerPoint настройка свойства RemovePersonalInformation аналогична, но поведение скрытого запуска немного отличается.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ppt = New-Object -ComObject PowerPoint.Application

# Открытие файла с указанием скрытого режима (msoFalse) во 2-м - 4-м аргументах
$presentation = $ppt.Presentations.Open("C:\Path\To\Your\File.pptx", $false, $false, $false)
$presentation.RemovePersonalInformation = $true
$presentation.Save()
$presentation.Close()

$ppt.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($ppt) | Out-Null

Заключение

Использование PowerShell и COM-объектов позволяет полностью автоматизировать удаление метаданных из файлов Office. Чтобы предотвратить случайную утечку конфиденциальной информации и личных имен, очень удобно иметь под рукой скрипт для массовой обработки папок перед сдачей проектов.

comments powered by Disqus
Создано при помощи Hugo
Тема Stack, дизайн Jimmy