본문 바로가기

파워쉘

[파워쉘] Zip으로 파일들을 압축하기

파워쉘이 더 알고 싶으면?

http://www.pavleck.net/powershell-cookbook/index.html


아래 예제는 이벤트 로그를 백업받고 그 파일들을 압축하는 예제이다.

요점은 다음과 같다.

1. 빈(null) Zip파일을 만든다.

2. 압축할 파일 목록을 만든 후 하나씩 만들어놓은 zip 파일에 add시킨다.


### ps

#

# 이벤트 로그 백업은 특성상 날짜를 지정하지 못 한다.

# 대상 Application의 전체 이벤트가 저장된다.

#


$today = (Get-Date).ToString("yyyyMMdd")


# 비어있는 Zip파일을 만든다.

$zipfilename = "C:\eventlogs_" + $today + ".zip"

if(-not (test-path($zipfilename)))

{

set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))

(dir $zipfilename).IsReadOnly = $false  

}


Get-WmiObject Win32_NTEventLogFile |

Where-Object { $_.LogFileName -Like "360*"} |

ForEach-Object {

#폴더가 미리 만들어져 있지 아니하면 저장 시 오류 남

$filename = "C:\" + $_.LogfileName + "_" + $today + ".evtx"

#기존에 있던 파일을 삭제하되 에러나도 닥치고 진행

del $filename -ErrorAction SilentlyContinue

#ReturnValue=0이면 성공적으로 백업받은 것임

$_.BackupEventLog($filename).ReturnValue

}


# 압축 준비

$shellApplication = new-object -com shell.application

$zipPackage = $shellApplication.NameSpace($zipfilename)


# 압축 시작

$evtxFiles = Get-ChildItem "C:\" -Filter "*.evtx"

foreach($file in $evtxFiles){

$zipPackage.CopyHere($file.FullName)

Start-sleep -milliseconds 500

}


# 만약 폴더채 압축하고 싶다면 아래와 같이 폴더명(경로를 포함한)을 써 주면 된다.

#$zipPackage.CopyHere(폴더명)