본문 바로가기

파워쉘

[파워쉘] 로그파일 정리하는 스크립트

파워쉘이 더 알고 싶으면?

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


아래는 스크립트 전문이다.


### ps


#

# 1. C:\360\Input History 폴더에서 모든 전날 날짜(20130219)의 파일을 카피하여

# C:\360\InputHistory_hist\20130219 밑에 폴더 형상까지 카피

# 2. C:\360\Output 폴더에서 모든 전날 날짜(20130219)의 파일을 카피하여

# C:\360\Output_hist\20130219 밑에 폴더 형상까지 카피

# 3. 가능하면 날짜 폴더를 압축(이건 나중에 ㅋㅋ)

# 4. 기존 데이터 삭제

#


#

# 파워쉘을 실행시키기 위해서는 Get-ExecutionPolicy의 결과가 Restricted이면 안된다.

# PS>Set-ExecutionPolicy RemoteSigned

#


# 로그파일 보관 기간 = 30일

$NDays = 30


# 어제 날짜 구하기

$yesterday = (Get-Date).AddDays(-1).ToString("yyyy_MM_dd")

#개발 시 확인용 $yesterday


#####################################################################################

#

# Input History Log 작업 시작

#

#####################################################################################


$sourceFolder = 'C:\360\Input History\'


$targetFolder = 'C:\360\InputHistory_hist\' + $yesterday

#개발 시 확인용 $targetFolder




##########################################################

#

# Input History Log 작업

#

# 이 스크립트에 대한 로그파일 작성

#


#로그 삭제 작업 시작 시간 작성

$thisLog = $targetFolder + '\..\deletedFiles_' + $yesterday + '.txt'


#해당 폴더가 없는 경우 파일 생성에 실패한다.

#그러므로 최초 실행시에는 오류가 발생할 것이다.

echo '로그 작업 시작!' | Out-File $thisLog

Get-Date | Out-File $thisLog -Append




##########################################################

#

# Input History Log 작업

#

# 어제 로그를 _hist에 카피하기

#


$filterStr = $yesterday + '*'

#개발 시 확인용 $filterStr


# 어제 로그를 카피한다

Copy-Item $sourceFolder -Destination $targetFolder -Filter $filterStr -Recurse




##########################################################

#

# Input History Log 작업

#

# 어제 로그를 삭제하기

#

#삭제 대상 파일을 log에 작성

echo '' | Out-File $thisLog -Append

echo '어제 로그를 삭제하기' | Out-File $thisLog -Append


$deletedFiles = Get-childItem $sourceFolder -Filter $filterStr -Recurse

#개발 시 확인용 $deletedFiles

#삭제 대상 건수 확인용

#$deletedFiles | foreach-object { $i++ }

#$i


#삭제(삭제할 내용이 있을 때만 실행)

if($deletedFiles -Eq $null) {

echo '[Input History]어제 로그 is null' | Out-File $thisLog -Append

}

else {

echo '[Input History]어제 로그가 있다!' | Out-File $thisLog -Append

#삭제 대상 파일을 log에 작성

$deletedFiles | Out-File $thisLog -Append

$deletedFiles | Remove-Item

}




##########################################################

#

# Input History Log 작업

#

# N일 전 _hist 로그를 삭제하기

# N일 전 날짜 이름의 폴더를 삭제

#

#삭제 대상 파일을 log에 작성

echo '' | Out-File $thisLog -Append

echo 'N일 전 _hist 로그를 삭제하기' | Out-File $thisLog -Append


# -N일 날짜 구하기

$NDaysAgo = (Get-Date).AddDays(-$NDays).ToString("yyyy_MM_dd")


$targetFolder = $targetFolder + '\..\'

$filterStr = $NDaysAgo


$deletedFiles = Get-childItem $targetFolder -Filter $filterStr


#삭제(삭제할 내용이 있을 때만 실행)

if($deletedFiles -Eq $null) {

echo '[Input History]N일 전 날짜 이름의 폴더 is null' | Out-File $thisLog -Append

}

else {

echo '[Input History]N일 전 날짜 이름의 폴더가 있다!' | Out-File $thisLog -Append

$deletedFiles | Out-File $thisLog -Append


#폴더를 질문 안 받고 삭제하려면 -Recurse 옵션을 추가한다.

$deletedFiles | Remove-Item -Recurse

}




##########################################################

#

# Input History Log 작업

#

# N일 전 $thisLog 로그를 삭제하기

#

#삭제 대상 파일을 log에 작성

echo '' | Out-File $thisLog -Append

echo 'N일 전 $thisLog 로그를 삭제하기' | Out-File $thisLog -Append


$filterStr = 'deletedFiles_' + $NDaysAgo + '*'

$deletedFiles = Get-childItem $targetFolder -Filter $filterStr



#삭제(삭제할 내용이 있을 때만 실행)

if($deletedFiles -Eq $null) {

echo '[Input History]N일 전 $thisLog 로그 is null' | Out-File $thisLog -Append

}

else {

echo '[Input History]N일 전 $thisLog 로그가 있다!' | Out-File $thisLog -Append

$deletedFiles | Out-File $thisLog -Append

$deletedFiles | Remove-Item

}




#####################################################################################

#

# Output Log 작업 시작

#

#####################################################################################


$sourceFolder = 'C:\360\Output\'


$targetFolder = 'C:\360\Output_hist\' + $yesterday

#개발 시 확인용 

$targetFolder




##########################################################

#

# Output Log 작업

#

# 이 스크립트에 대한 로그파일 작성

#


#로그 삭제 작업 시작 시간 작성

$thisLog = $targetFolder + '\..\deletedFiles_' + $yesterday + '.txt'


#해당 폴더가 없는 경우 파일 생성에 실패한다.

#그러므로 최초 실행시에는 오류가 발생할 것이다.

echo '로그 작업 시작!' | Out-File $thisLog

Get-Date | Out-File $thisLog -Append




##########################################################

#

# Output Log 작업

#

# 어제 로그를 _hist에 카피하기

#


$filterStr = $yesterday + '*'

#개발 시 확인용 $filterStr


# 어제 로그를 카피한다

Copy-Item $sourceFolder -Destination $targetFolder -Filter $filterStr -Recurse




##########################################################

#

# Output Log 작업

#

# 어제 로그를 삭제하기

#

#삭제 대상 파일을 log에 작성

echo '' | Out-File $thisLog -Append

echo '어제 로그를 삭제하기' | Out-File $thisLog -Append


$deletedFiles = Get-childItem $sourceFolder -Filter $filterStr -Recurse

#개발 시 확인용 $deletedFiles

#삭제 대상 건수 확인용

#$deletedFiles | foreach-object { $i++ }

#$i


#삭제(삭제할 내용이 있을 때만 실행)

if($deletedFiles -Eq $null) {

echo '[Output]어제 로그 is null' | Out-File $thisLog -Append

}

else {

echo '[Output]어제 로그가 있다!' | Out-File $thisLog -Append

#삭제 대상 파일을 log에 작성

$deletedFiles | Out-File $thisLog -Append

$deletedFiles | Remove-Item

}




##########################################################

#

# Output Log 작업

#

# N일 전 _hist 로그를 삭제하기

# N일 전 날짜 이름의 폴더를 삭제

#

#삭제 대상 파일을 log에 작성

echo '' | Out-File $thisLog -Append

echo 'N일 전 _hist 로그를 삭제하기' | Out-File $thisLog -Append


# -N일 날짜 구하기

$NDaysAgo = (Get-Date).AddDays(-$NDays).ToString("yyyy_MM_dd")


$targetFolder = $targetFolder + '\..\'

$filterStr = $NDaysAgo


$deletedFiles = Get-childItem $targetFolder -Filter $filterStr


#삭제(삭제할 내용이 있을 때만 실행)

if($deletedFiles -Eq $null) {

echo '[Output]N일 전 날짜 이름의 폴더 is null' | Out-File $thisLog -Append

}

else {

echo '[Output]N일 전 날짜 이름의 폴더가 있다!' | Out-File $thisLog -Append

$deletedFiles | Out-File $thisLog -Append

#폴더를 질문 안 받고 삭제하려면 -Recurse 옵션을 추가한다.

$deletedFiles | Remove-Item -Recurse

}




##########################################################

#

# Output Log 작업

#

# N일 전 $thisLog 로그를 삭제하기

#

#삭제 대상 파일을 log에 작성

echo '' | Out-File $thisLog -Append

echo 'N일 전 $thisLog 로그를 삭제하기' | Out-File $thisLog -Append


$filterStr = 'deletedFiles_' + $NDaysAgo + '*'

$deletedFiles = Get-childItem $targetFolder -Filter $filterStr


#삭제(삭제할 내용이 있을 때만 실행)

if($deletedFiles -Eq $null) {

echo '[Output]N일 전 $thisLog 로그 is null' | Out-File $thisLog -Append

}

else {

echo '[Output]N일 전 $thisLog 로그가 있다!' | Out-File $thisLog -Append

$deletedFiles | Out-File $thisLog -Append

$deletedFiles | Remove-Item

}






#로그 삭제 작업 종료 시간 작성

echo '' | Out-File $thisLog -Append

echo '로그 작업 끝!' | Out-File $thisLog -Append

Get-Date | Out-File $thisLog -Append