명령줄 환경에서, 또는 관리목적의 스크립트에서 예약작업을 등록할려면,. 기존에는 옵션이 조금 빈약한 At 을 이용하거나, 별도의 Win32 API 를 호출하는 프로그램을 이용해서 작업을 해야 했으나,
이런 작업을 쉽게 할수 있는 컴포넌트 및 스크립트를 MS에서 다운로드 할수 있으며, 다음 링크에서 가능하다. 다운로드 할때 정품인증 하므로,. 정품이 아닌 OS는 알아서 잘 하면 되겠다. ^^
http://www.microsoft.com/downloads/details.aspx?FamilyID=601d75e2-f907-4e51-ad88-adb818df1d27&displaylang=en
다운로드 하면 다음과 같은 파일이 압축형태로 풀린다.
뭐 별거 없다.
각각의 파일기능은,. itask.tlb 는 윈도우 예약작업 컴포넌트인 SechedulingAgent.dll 에서 참조하는 라이브러리 파일이며, SQLSchedullingAgent.dll 은 SQL Server 의 스케쥴링을 등록해 주며,
sqltasks.xml 은 XML 형태의 스케쥴링 목록을 가진 파일, tasks.xml 은 예약작업 목록을 가진 파일이다.
물론, 최종적인 작업은 task.vbs 파일이 해당 XML 파일에 지정된 컴포넌트를 호출하여 해당 XML 파일의 예약작업 목록을 등록하는 작업을 하게 된다.
그럼, 일단 실행해 보자.
C:\task>task.vbs tasks.xml
Microsoft (R) Windows Script Host 버전 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
Task: System State Backup scheduled.
Microsoft (R) Windows Script Host 버전 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
Task: System State Backup scheduled.
결과, task.xml 에 지정된 예약작업이 등록되었다.
그럼, XML 파일은 어떤 형식으로 되어 있을까?. 이 역시 뭐 간단하다. 물론, XML 구조에 대한 간단하나마 이해를 하고 있으면 말이다.
task.vbs 소스파일을 보면,. 지정된 XML 파일을 파싱하여 지정된 agent 라이브러리 이용하여 task 노드의 어트리뷰트의 예약작업 각 항목을 등록을 하게 된다.
SQL 스케쥴링도 별반 다를게 없다.
물론, 하나의 tasks.xml 파일 내부에, 윈도우 예약작업을 2개 이상 지정하거나, SQL 예약작업과 함께 설정할수가 있는데,
XML 노드중, agent 노드가 하나의 예약작업이므로 1개 이상의 예약작업 설정이 가능하다. 운영하는 서버가 여러대이거나, 또는 관리하는 컴퓨터가 여러대 일 경우 쉽게 예약작업 설정이 가능해 진다.
실제 처리를 하는 파일인 task.vbs 소스를 보면, 내부가 모두 각 함수로 잘 정리되어 있는데 각 함수의 기능은 앞서 얘기한 각 항목별 기능을 처리하는 함수이다.
dll 파일이 레지스트리에 등록되어 있지 않으면 레지스트리에 등록하는거나, xml 파일 파싱을 하는거나 컴포넌트를 호출하여 실제 예약작업에 등록하는 등이다.
추가로, 예약작업에 등록하는 방법은 WMI 를 이용하는 방법도 있다.
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set objNewJob = objWMIService.Get("Win32_ScheduledJob") errJobCreated = objNewJob.Create _
("Notepad.exe", "********123000.000000-420", _
True , 1 OR 4 OR 16, , , JobID)
Wscript.Echo errJobCreated
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set objNewJob = objWMIService.Get("Win32_ScheduledJob") errJobCreated = objNewJob.Create _
("Notepad.exe", "********123000.000000-420", _
True , 1 OR 4 OR 16, , , JobID)
Wscript.Echo errJobCreated
WMI 를 이용하는것과 위 vbscript 의 차이점은, API 가 다르다. WMI 에서의 실제 작업은 At 방식과 같게 작동한다. 그래서 특정 실행 계정을 지정할수 없으며, SYSTEM 계정 권한으로 등록되어 실행된다.
위 2가지 방식으로, 쉽게 예약작업 설정이 가능하다. 물론 관리자가 어떤 작업을 프로그래미컬 한 작업을 원할 경우에 말이다.
20-TaskScheduler-1.png
20-TaskScheduler-2.png
20-TaskScheduler-3.png
20-TaskScheduler-4.png
20-TaskScheduler-5.png
댓글 없음:
댓글 쓰기