레이블이 powershell script인 게시물을 표시합니다. 모든 게시물 표시
레이블이 powershell script인 게시물을 표시합니다. 모든 게시물 표시

2013년 4월 23일 화요일

powershell script를 사용해 eventlog를 백업 및 삭제 해보자

powershell script (ps1)을 이용하여 eventlog를 백업 하고 삭제 해보자

파워쉘을 사용하여 이벤트로그를 백업 하는 방법을 찾아봤다...
난 파워쉘에 대해 잘 알지 못해 구글링 해보았다.
파워쉘을 이용하여 이벤트 로그를 csv로 백업(링크1)하는 방법도 있고
dumpel.exe를 이용하여 이벤트로그를 백업(링크2)하는 방법도 있지만
파워쉘을 이용하여 evtx파일로 백업(링크3)하는게 내가 찾는 방법이고 제일 좋을 것 같다.


본래 링크3의 블로그 내용에는 다음과 같이 ps1이 짜여져 있지만

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


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
}



실행 안되는 부분과 필요없는 부분을 빼면
*필요없는 부분 : Where-Object { $_.LogFileName -Like "360*"} 
*실행안되는 부분 : del $filename -ErrorAction SilentlyContinue 는
                           Clear-Eventlog -LogName [LogName]로 변경


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

Get-WmiObject Win32_NTEventLogFile |
ForEach-Object {
#폴더가 미리 만들어져 있지 아니하면 저장 시 오류 남
$filename = "C:\" + $_.LogfileName + $today + '.evtx'
#ReturnValue=0이면 성공적으로 백업받은 것임
$_.BackupEventLog($filename).ReturnValue
}


Clear-Eventlog -LogName [LogName]


자~~ 여기까지가 아주 기본적인 단계이다..여기에다가 네트워크 드라이브를 붙여서 원격지에 저장하도록 해볼꺼다..



powershell script (ps1)을 cmd에서 실행 해보자 (2/2)

powershell script 인 ps1을 cmd창이나 bat파일을 이용해 실행 해보자..

먼저 1편☜ 를 보고 실행정책을 변경하자.

실행은
powershell.exe .\test.ps1 처럼 상대경로를 적어주거나
powershell.exe d:\test\test.ps1처럼 절대경로를 적어주면된다.

참고 링크 : http://talsu.net/?p=871

powershell script (ps1)를 실행 해보자. (1/2)

파워쉘 스크립트 .ps1을 실행하면

이 시스템에서 스크립트를 실행할 수 없으므로 D:\eventlogbackup.ps1 파일을 로드할
 수 없습니다. 자세한 내용은 "get-help about_signing"을 참조하십시오.
위치 줄:1 문자:22
+ D:\eventlogbackup.ps1 <<<<
    + CategoryInfo          : NotSpecified: (:) [], PSSecurityException
    + FullyQualifiedErrorId : RuntimeException

이라는 메시지를 뿌리면서 실행이 거부된다....
이게 뭔가...... 내가 만들어서 내가 쓴다는데 니가 왜..왜왜왜왜왜~~~~~
그래서 또 구글링 해봤다..
원인은 실행정책이 최강으로 설정이 되어 있어서 그렇다....
내 컴퓨터 또는 내가 관리하는 서버의 실행정책을 확인해보자...
파워쉘을 실행하고 명령어 Get-ExecutePolicy 해보자
변경 한 적이 없다면 대부분 Restricted로 되어 있다.
설정값에 대한 설명은 참고링크 2번을 따라가거나 Get-Help about_execution_policies를 실행하면 자세한 설명이 되어있다.
보통 RemoteSigned나 Unrestricted로 많이 하는 것 같다..

값을 확인했으면 설정을 해보자
설정하는 명령어는 get의 반대인 set이다.
Set-ExecutePolicy [설정값] 이다.
실행하면 할꺼냐 말꺼냐고 물어보는대 엔터키 나 Y 엔터키를 눌러 값을 변경하면 된다.

**추가 내용
위에 방법은 계속적으로 실행정책을 적용하는거고 bat파일을 통해 잠시 실행할때만 바꾸고자 할때는 커맨드라인에 이렇게 적어 주면되, 상세한건 powershell -help 해봐
powershell -noprofile -executionpolicy [bypass | remotesigned...등등] .\*.ps1

(2편)

참고 링크