Loading
2009. 6. 24. 17:32 - 나쁜철군

Windows Script Host ②

이전 강좌를 통해서 여러분은.... WSH 를 통해서 서버단에서 뭔가의 작업을 VB나 VC++의 사용없이, 가벼운 스크립트만으로 처리할 수 있지 않을까하는 기대를 살며시 가질 수 있었습니다. 그렇습니다.

 

가벼운 소소한 작업들이라면 굳이 언어의 힘을 빌리지 않아도 스크립트만으로도 충분히 멋지에 소화해 낼 수가 있지요...  이번에 할 작업은...  먼저, NT 시스템에서 기본적으로 제공하는 스케쥴러를 사용하는 방법입니다.

 

NT 서버의 명령 프롬프트에서는 AT 이라는 명령어를 통해서 스케쥴을 걸 수가 있습니다. 이를 사용하면 특정 작업을 우리가 지정하는 시간에 일어나게 할 수가 있지요...  NT를 공부하신 분은 아마도 다 아시는 이야기이겠습니다만... 모든 분들이 NT 나 Windows 2000 을 공부하셨을리는 없기에....  여기서 스케쥴러의 사용법도 간단히 알아보고 넘어가도록 하겠습니다.

 

NT 스케쥴러를 알아보기 위해서 다음처럼 명령 프롬프트로 나가봅시당....  그리고, 이 명령창에서..

C:\>AT/?

 

라고 실행을 해보세요..  AT 라는 명령어가 바로 스케쥴러 명령이구요. /?는 도움말을 보겠다는 옵션입니다. 그러면, 다음처럼 AT를 사용하는 방법이 주욱 나올 것입니다.

 

 

우리는 이 자리에서 이 모든 옵션의 기능을 다 알아볼 것은 아니구요.. 가장 심플한 수준으로 우리가 필요한 정도만을 알아보도록 하겠습니다..  ^^

가장 간단하게라면 AT 명령을 다음과 같이 작성하실 수 있습니다. 여러분도 같이 한번 작성해 봅시다..

 

C:\>AT  23:02  /interactive  "explorer"

 

     주의하세요..!!!

위의 AT명령으로 스케쥴을 걸 경우에 저는 23:02 로 시간을 지정했습니다만.. 여러분은 현재 여러분의 시스템 시간에 +2 분 정도 한 시간으로 지정하세요...  그래야지.. 이 명령을 설정한 뒤에 한 2분 뒤에.. 이 스케쥴러에 의해서 explorer(탐색기)가 저절로 실행되어지는 것을 보실 수가 있습니다. ^^

 

위의 명령을 실행하면.. 여러분은 

 

새 작업을 추가했습니다. 작업 ID = 1

 

과 같은 메시지를 받게 될 것입니다. 이것은 정상적으로 현재의 작업을 스케쥴러에 저장했다는 의미가 됩니다. 이러한 메시지를 받았다면 과연 이 작업이 제대로 지정되어져 있는지를 확인하기 위해서.. 다음과 같이 작성하고 실행해 보세요

 

C:\>AT

 

이러면 여러분은 다음과 같은 결과를 보실 수가 있습니다. 작업이 제대로 지정되어져 있는 것을 말이지요

 

 

AT를 사용할 경우 지정은 위처럼  AT 명령어  [작업을 실행할 시간]  [/interactive]  "[작업명령]"  으로 지정하시면 됩니다. 하지만 만일, 현재 시간이 밤 9시(즉, 21:00) 인데 여러분이 스케쥴을 걸면서 다음처럼 지난 시간으로 걸게되면....

 

C:\>AT  20:05  /interactive  "notepad"

 

이 작업은 다음날 저녁 8시 5분에 실행되게 될 것입니다. 어렵지 않죠?  ^^
아아.. .interactive 라는 옵션은 여러분의 자신의 서버에서 스케쥴을 걸 경우는 꼭 지정해야 하더군요... 저도 잘은 모릅니다만.. 글케하라는 팁을 전에 보았었답니다. ^^

 

자...  그렇다면 스케쥴러는 제대로 지정이 되어졌고.. 여러분은 지정된 시간이 되면...  갑자기 탐색기가 저절로 뜨는 것을 보실 수가 있을 것입니다. 재미있지 않나요?

 

아아.. 혹 explorer 이 왜 탐색기냐? 인터넷 익스플로러가 아니냐? 하시는 분이 있을 수 있는데요... 인터넷 익스플로러의 명령은 iExplorer.exe 이랍니다.  ^^

 

그리고, 이 스케쥴러는 날짜반복 지정이나.. 일자를 정해놓고 특정일자에 실행하게 하는 것등 여러가지 스케쥴링이 지원됩니다만.. 이것까지 다루는 것은 강의의 범위를 벗어나는 것 같고.. 또한 이러한 내용은 NT 사이트들에 가시면 잘 나와있으니 그곳을 참고하시기 바란답니다...

자...  이제 그만그만...

 

지금 막 여러가지 스케쥴을 걸고 작업을 막 늘리시면서 신나있을 거라는 거 압니다. 저도 그랬으니까요... 하지만, 강좌에 조금은 전념해 주시기 바랍니다...  -_-;

 

이렇게 하는 방법을 알았으니 이것을 한번 WSH로 작성해서.. 적용해 보아야 하겠지요? 좋습니다. 한번 해보자구요...  ^^   다음과 같은 VBS 파일을 하나 만들어 봅시다.

이름하야  launchNotepad.vbs 로 말입니다. (이름이 이상한가? -_-;)

 

Dim WshShell, NewTime, strAT
set WshShell = WScript.CreateObject("WScript.Shell")

NewTime = DateAdd("n", 1 ,time)
NewTime = hour(NewTime) & ":" & minute(NewTime)
strAT = "AT " & NewTime & " /interactive ""notepad"" "
WshShell.Run strAT
msgbox strAt & " 라고 스케쥴을 걸었습니다"

set wshshell = nothing

 

 

그리고 난 다음에 여러분이 이 VBS 파일을 더블클릭해서.. 실행을 하게 되면.... 이제 이 VBS는 실행되면서... 실행되는 현재의 시간을 구해와서 거기다가 1분을 더한 시간으로 스케쥴을 걸게 됩니다.

 

바로.. 메모장을 1분뒤에 실행하게 하는 스케쥴을 말이지요...  ^^ 

    

주의하세요... 제가 여러 서버에서 테스트를 해보았는데..  Wndows 2000 인 경우, 몇몇 서버에서는 이상한 이유로 스케쥴러가 제대로 작동하지 않았습니다. 그런 서버는 Windows 2000 ServicePack 2를 한번 설치해 보세요.... 혹시 모르니까요.. 왜 어떤 서버는 안되는 것일까??  이것은 거의 디폴트로 되어야 하는데 말입니다.   -_-;

 

자... 그러면 이제 스케쥴러를 사용하는 방법에 대한 이야기는 어느정도 된 것 같구요.. 이제는 VBS 파일안에서 CDONTS를 통해서 메일을 보내는 방법에 대해서 이야기를 해봅시다..

이미 여러분이 ASP & Mail 파트쪽에서 공부를 했다는 전제하에 저는 진행하도록 합니다. asp & mail 파트에서는 여러분이 NT 나 Windows 2000 에서 기본적으로 제공되는 CDONTS 를 사용해서 메일을 쉽게 보낼 수 있다는 사실을 이미 배웠습니다..  ^^  그렇죠?  그 기억을 그대로 되살리면서 다음 소스를 보도록 하십니다.

 

MailTest.vbs

Set objSendMail = CreateObject("CDONTS.NewMail")
objSendMail.From = "admin@test.co.kr"    '요기는 자기의 메일주소를 써 주세요
objSendMail.To = "taeyo@inbrein.com"    '요기도 자기의 메일주소를 써 주세요
objSendMail.Subject = "안녕하세요? WSH 테스트입니다 (" & Date() & ")"
objSendMail.Body = "오오... 태오다 태오"

objSendMail.Send
Set objSendMail = Nothing

msgbox "메일이 발송되었습니다"

 

 

위의 소스에서 만일 현재 테스트하는 서버에 아웃룩 익스프레스에 메일계정이 하나라도 등록이 되어져 있다면... From 부분은 기입하지 않으셔도 됩니다. 그럴 경우 그 기본계정으로 메일이 발송되게 되거든요...  메일이 발송되며 현재 메일을 쏘는 서버의 아이피와 메일을 발송한 기본계정이 무엇인지 다 보내어지니까요..  메일을 보낸 사람이 누군지 충분히 추적을 할 수가 있습니다. 그러니 이 소스를 가지고 폭탄메일과 같은 안 좋은 일에 사용하면 안돼요...  금방 꼬리를 잡히게 된답니다. 절대 그런 장난은 하지 마세요...

자.. 어쨋든 위의 소스는 이미 여러분이 잘 알고 계시는 소스였어요. 이미 ASP 에서 공부한 부분일 것입니다. ^^

 

자.. 그럼 이제 무엇을 하려하느냐?

메일을 발송하는데 우리가 메일 보낼 시간을 지정해서 메일을 발송하게끔 하려는 것이랍니다. 위의 메일 소스에서는 단지 본문 내용으로 "오오... 태오다 태오"를 보내고 있지만... 그러한 본문은 여러분이 따로 텍스트로 꾸밀 수 있을 것이며, 그 내용을 FileSystemObject 를 통해서 불러와서 메일을 발송할 수 있을 것입니다.

 

그쵸? 이전 강좌들(초급강좌)을 모두 공부하고 이 팁을 보시는 것이라면 지금의 제 말이 무슨 의미인지 아실 겁니다. 해서...  관리자인 우리는 하루에 한번 메일링을 보내는데....  그 내용을 작성한 다음.. 특정 시간에 그 메일이 보내지게 하고 싶다...   이거죠..

 

그럼 어떻게 하면 될까요? 일단, 보낼 메시지를 작성할 텍스트 파일을 만듭니다. 뭐.. 이것은 그냥 텍스트 파일이니까요...  ^^  C:\temp 에 만들어 보도록 하겠습니다.

C:\temp 폴더에 그냥 텍스트 파일 하나만 만들어 보도록 하세요....  "메일발송용텍스트.txt" 라는 이름으로 그냥 만들어 두기만 하세요..  ^^

 

그리고, 이제 위의 메일발송 소스를 다시금 만들어 보도록 합시다.. 어떻게? 메일의 본문내용을 "메일발송용텍스트.txt" 에서 불러와서 보내는 소스로 말이지요..  ^^  아마도 다음처럼 만들면 큰 문제가 없겠지요?

 

SendMail.vbs

Dim objSendMail, fso, ofile, body

Set objSendMail = CreateObject("CDONTS.NewMail")
Set fso = CreateObject("Scripting.FileSystemObject")
Set ofile = fso.openTextFile("C:\temp\메일발송용텍스트.txt" )
body = oFile.readAll

objSendMail.From = "admin@MyTest.co.kr"
objSendMail.To = "taeyo@inbrein.com"
objSendMail.Subject = "안녕하세요? 즐거운 오후 2시 입니다."
objSendMail.Body = body

objSendMail.Send
Set objSendMail = Nothing

msgbox "메일이 발송되었습니다"

 

 

그리고, C:\temp 안에 있는 "메일발송용텍스트.txt"을 열어서 뭐.. 대충 글을 작성해 봅니다... 다음 그림처럼 말이지요..  ^^

 

 

주의주의!!!

WSH가 2000 에서 예상대로 동작하지 않기에.. 잠시 강좌를 보류합니다. 원인을 가능한 한 빨리 파악해서 강좌를 이어서 올리도록 하겠습니다.

감사합니다


출처 : http://cafe.naver.com/q69/53643