Featured image of post 'PowerShell로 Excel이나 Word 등의 메타데이터(개인 정보)를 일괄 삭제하는 방법'

'PowerShell로 Excel이나 Word 등의 메타데이터(개인 정보)를 일괄 삭제하는 방법'

PowerShell로 Excel이나 Word 등의 메타데이터(개인 정보)를 일괄 삭제하는 방법

Excel 등의 Office 파일에는 작성자, 최종 수정자, 회사명 등의 ‘메타데이터(개인 정보)‘가 자동으로 저장됩니다. 사외에 파일을 공유할 때 등, 이러한 정보를 삭제하고 싶은 경우가 많습니다.

이 글에서는 PowerShell을 사용하여 Excel의 메타데이터를 삭제하는 방법을 중심으로, 폴더 내 일괄 처리 ** 나, ** Word・PowerPoint 등 다른 Office 파일에 대한 응용 까지 자세히 해설합니다.


1. 하나의 Excel 파일 메타데이터 삭제하기

가장 기본이 되는, 단일 Excel 파일의 개인 정보를 삭제하는 스크립트입니다. Excel의 COM 개체를 호출하여, 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

# 제2인수〜제4인수에서 숨김 모드(msoFalse) 등을 지정하여 열기
$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로 만듦
JimmyStack 테마 사용 중