« PREV : 1 : NEXT »
 

Search Results for '예약작업'

1 POSTS

  1. 2010/03/09 Powershell 결과 메일 전송 및 예약 작업 등록 방법

Windows 에서 제공 하는 Powershell을 통해 많은 작업을 편리하게 Cmd로 확인할수 있습니다.

이를 더 편리 하게 사용하기위하여, Powershell을 이용해, 원하는 결과를 파일로 내보낸 다음 내보낸 파일을, 메일로 전송하는 작업을 예약작업으로 실행해 봅시다.

여기서는 다른 환경(Powershell 확장 명령)에서도 사용할수 있도록 Exchange 환경을 예로 들겠습니다.

1.원하는 결과 Powershell로 추출하기
아마 많은 분들이 알고 있으시리라 생각됩니다. Powershell에서는 export라는 명령과 |(파이프라인)을 통해 실행 결과를 저장 파일로 내보낼수있습니다.

쉽게 설명드리면
Get-ExchangeServer | where {$_.ishubtransportserver -eq "true"} | get-message -resultsize unlimited
위 명령은 Get-Exchangeserver의 실행결과를  |을 통해 저장한후 hubtransportserver로 지정된 정보를 필터링을 통해 골라내  조건에 맞는 정보만 결과값으로 가지고 있으라는 명령입니다. 여기에 아래 명령를 하나더 붙였다고 생각하시면 됩니다.
| get-message -resultsize unlimited
그럼 그결과를 가지고 다시 조건을 거는 결과 인데 위 처음 실행한 명령에서 HubTransport 서버의 정보가 남아 있겠죠 그 결과를 가지고, Get-Message를 하라는 명령에 다시 조건을 걸어, 사이즈가 unlimited인 메세지를 결과만 남게 됩니다.

위 명령을 실행하면 아래와 같은 결과를 가지게 됩니다.


*사이트 보호를 위해 실제 출력 데이터 내용은 뺐습니다.^^;
그럼 파일까지 생성해 볼까요?
Get-ExchangeServer | where {$_.ishubtransportserver -eq "true"} | get-message -resultsize unlimited | csv-export Queue.csv
자 이제 이해가 확~ 되시죠? ^^ |(파이프라인)을 통해 결과를 명령어로 출력하도록 하는 것 입니다.
위 명령을 자주 사용하신다면 ps1확장자를 가진 파일로 생성(ASCII)하시면 됩니다.
Check-Queue.ps1
그럼 이제 메일을 전송 하는 단계를 진행해 봅시다.

2. Powershell 명령 예약작업 등록하기
이건 진행해본 사람들은 아마 쉽게 바로 실행하기는 않될거라는것을 아실겁니다.
눈치가 있으신 분들은 아마 Technet을 찾아보시고, Google 검색을 하셔서 찾아 내셨을거라 생각합니다.
저도 여러 삽질끝에 확인된 결과를 여기 정리해 드릴게요.

Powershell 명령어는 특정 확장자를 가지고 있어  바로 실행이 되지 않고, Powershell 을 통해 실행하는 연결 문서를 실행하듯이 실행하셔야 합니다.
예로 Check-Queue.ps1(Powershell 확장자)를 CMD에서 실행하고자 하신다면,
Powershell Check-Queue.ps1
이라고 입력해 주시면 됩니다.

그럼 실행이 되었을까요?

아마 위 명령으로 오류 메세지와 함께 실행이 되지 않을것 입니다.
이유는 즉, Get-ExchangeServer라는 명령이 Powershell 기본 명령이 아닌, Exchange Server 전용 Powershell 명령이기 때문입니다.
이를 해결하기 위해 제공하는 옵션으로 -PSConsoleFile을 사용할수 있습니다.
위 명령을 통해 확장 명령이 등록된 psc1(환경설정파일)을 연결해주시면, 해당 확장 명령이 사용가능합니다.
Exchange Server용 psc1는 Exchange Server 설치 경로은 Bin에 위치 합니다. 
그럼 다음과 같이 입력해 봅시다.
POWERSHELL.Exe -PSconsoleFile "C:\Program Files\Microsoft\Exchange Server\Bin\exshell.psc1" -COMMAND "& {& '\\Path\Check-Queue.ps1'}"
위처럼 실행 경로 앞뒤로 }로 묵는 이유는 스크립트 상 경로 오류를 막기 위함 입니다.

정상 실행결과가 생성된다면 위 명령을 cmd(확장자), bat(확장자)로 저장하여 쉘 스크립트로 실행가능하도록 만듭니다.
Job1.bat라고 저장합니다.
그리고 제어판 예약 작업을 실행하여, 방금 만든 Job1.bat를 등록하시면 정상 예약 작업 실행이 가능하게 됩니다. ^^

어느덧 마지막 단계이네요,
이제 자동 실행까지 원하는 결과를 얻을수 있는데 매번 서버에 들어가서 확인해야 한다면 참으로 불편하겠죠,
그것을 위해 자신 혹은 해당 봐야하는 담당자에게 메일을 보내는 스크립트를 생성해 봅시다.


3. 실행결과 메일로 첨부하여 전송하기
첨부 파일 저장하는 명령어는 VBS의 기능을 사용합니다.
하지만Powershell도 VBS를 지원하기 때문에 잘 동작한답니다.
메일을 보내는 스크립트는 다음과 같습니다.

$filename = "\\Path\Queue.csv"
$smtpServer = "localhost"

$msg = new-object Net.Mail.MailMessage
$att = new-object Net.Mail.Attachment($filename)
$smtp = new-object Net.Mail.SmtpClient($smtpServer)

$msg.From = from@domain.com
$msg.To.Add(to@domain.com)
$msg.Subject = "현재 Queues 현황"
$msg.Body = "안녕하세요 ITKA 올엠입니다. 결과 파일로 첨부하였습니다."
$msg.Attachments.Add($att)

$smtp.Send($msg)
이 부분은 길게 설명 않드리겠습니다. 이것은 그대로 사용하시면 되고, 대신 SMTP의 릴레이 설정을 Enable 하셔야 하고,
첨부 파일의 경로는 전체경로로 입력하시기 바랍니다.(미지정시 기본 경로가 로그인 유저의 내문서 경로가 됩니다.) 
그리고, Exchange의 경우 받는 사용자의 사서함을 찾는 경우가 발생할수 있습니다.


추가 궁굼하신점, 틀린부분 보충 설명은 댓글및 방명록에 남겨주세요..

저작자 표시 비영리
Write your message and submit