Windows Script Host 에 대하여
▒ Programming/ASPhttp://www.microsoft.com/korea/msdn/workshop/languages/clinic/scripting990705.asp
이제, 스크립트 작업을 시작해 보세요!
Visual Basic Scripting Edition (VBScript)이나 JScript 사용자라면, Microsoft Internet Explorer나 Active Server Pages(ASP) 기술에서 두 언어를 사용해본 적이 있을 것입니다. Microsoft Windows Script를 지원하는 응용 프로그램들의 경우 모두 이 언어를 사용할 수 있는데,. Microsoft Ouklook과 Microsoft Exchange 응용 프로그램에서 VBScript를 사용하는 것이 그 예입니다. VBScript 및 JScript 엔진을 사용하는 또 다른 응용 프로그램으로는 Windows Script Host(WSH)를 들 수 있습니다. WSH는 명령 라인에서 스크립트를 실행하거나 full-blown Windows 응용 프로그램으로 스크립트를 실행할 수 있게 해주는 Windows용 배치 파일들의 집합이라 말할 수 있습니다. 따라서, 여러분은 기존의 배치 스크립트 언어를 사용하는 대신 실제 프로그래밍 언어(예를 들어, Perl)를 사용하여 로그온 스크립트, 백업 루틴, 관리 스크립트를 작성할 수 있습니다. 이 기사에서는 WSH 2.0(현재 베타 버전만 있음)의 새로운 기능과 그 기능을 Windows에서 어떻게 사용하는지에 관해 중점적으로 설명할 것입니다.
WSH 2.0(현재로는 베타 버전만 있음)의 새로운 기능과 그 기능을 Windows에서 어떻게 사용하는지 알아봅시다.
WSH란?
Windows Script Host 2.0은 Windows 9x나 Windows NT 운영체제에서 임의의 스크립트 엔진을 실행할 수 있게 해주는 언어-독립적 호스트입니다. WSH 1.0에서는, 파일 확장명을 보고, 그 파일과 관련된 스크립트 엔진을 해독하고, 파일을 로드한 다음, 코드를 실행해야 했습니다. 예를 들어, backup.vbs는 VBScript 스크립트 엔진을 통해 실행되고, backup.js는 Jscript를 통해 실행됩니다. 스크립트 엔진 자체는 운영 체제에 연결될 수 없기 때문에, 적당한 개체 모델 없이 스크립트를 실행한다는 것은 거의 소용없는 일이었습니다. 이것은 안전성과 보안성이 절대적으로 요구되는 환경에서 스크립트 엔진을 응용 프로그램에 호스트할 때 보안을 유지하기 위한 것이었습니다. 가장 좋은 예는 Internet Explorer를 들 수 있는데, 여러분은 drevil.com에서 나쁜 의도로 제작된 웹 페이지를 다운 받아 여러분의 하드 드라이브가 강제 포맷되거나 여러분의 중요한 자료를 도둑맞는 불상사는 원하지는 않을 것입니다. 이 문제를 해결하기 위해, WSH는 각 스크립트에 대한 개체 모델을 제공하며, 여러분은 이 개체 모델을 통해 시스템에서의 스크립트 실행에 필요한 기본 정보를 얻을 수 있습니다. 예를 들어, 개체 모델은 스크립트에 전달된 모든 매개 변수가 들어 있는 매개 변수 컬렉션을 제공합니다. 개체 모델에 관한 내용은 나중에 더 자세히 설명하도록 하겠습니다.
WSH 1.0은 출발은 좋았으나, 사실상 파일 확장명에 주로 의존하여 파일이 WSH에 있어야 하는지를 결정한다는 것은 그다지 유용한 기술이었다고 볼 수는 없을 것입니다. 왜냐하면, 스크립트 엔진 업체는 새로운 스크립트 엔진을 발표할 때마다, 언어 이름에 적합하고 아직까지 사용된 적이 없는 새로운 확장명을 만들어야 했기 때문입니다. 이러한 문제는 5.0 버전에서, Script Encoding을 VBScript/JScript에 도입할 때 드러났습니다. 우리는 결국 VBScript encoded를 뜻하는 .vbe 그리고 JScript encoded를 뜻하는 .jse를 사용하여 문제를 해결할 수가 있었습니다. 하지만, 제 3의 제품은 말할 것도 없고 Microsoft 제품에 맞는 확장명을 찾기란 그리 쉽지 않았습니다. 또한, 파일 확장명에 의존해야 한다는 점 때문에 툴 업체들이 WSH를 지원하기가 어려웠습니다. 예컨대, .js 파일은 WSH, HTML, ASP 기술 중 어느 쪽을 의미하는 파일일까요? 셋 다일 수도 있겠죠? 이러한 혼동 때문에 툴 업체들은 HTML을 선택했고, WSH 제작이 다소 불가능해진 것입니다.
스크립트 엔진 및 툴 업체들이 느낀 혼동은 WSH 사용자들에 비하면 아무것도 아니었습니다. WSH 커뮤니티는 WSH 뉴스그룹을 통해 이러한 문제점을 공개했습니다. 이 포럼은 Windows Script 팀에게 사용자들이 원하는 것이 무엇인지를 알리는 데 큰 도움이 되었는데, 가장 공통된 질문은 일반 함수를 스크립트에 포함시키는 방법에 관한 것이었습니다. WSH 1.0은 유효한 스크립트 코드만 들어 있는 텍스트파일에 주로 의존하기 때문에 일반적인 함수를 포함시키는 것은 거의 불가능했습니다. 두 번째로 가장 많았던 요청은 프로그래머가 하나의 파일 안에서 여러 개의 언어를 사용할 수 있게 해달라는 것이었습니다. 이것은 소수에게만 국한된 요청인 것처럼 들리지만, 의외로 일반적인 문제이기도 했습니다. 많은 프로그래머들이 특별한 스크립트 언어(예를 들어, Perl)를 사용하여 함수를 만들었고 다른 종류의 언어(가령, VBScript)를 사용하여 프로그램을 완성했습니다. WSH는 여러 언어를 지원하지는 않았기 때문에, 프로그래머는 자신이 작성한 Perl 코드를 모두 다시 작성해야 WSH와 VBScript를 사용할 수 있었습니다. 더군다나, 코드를 처음 작성했던 사람으로부터 정보를 제공 받을 수 없는 경우에 이 문제는 더 심각했습니다.
WSH는 런타임 개체 모델 외에도, Windows 스크립트를 더 쉽게 작성할 수 있는 개체 집합을 제공합니다.
- 네트워크 개체 : 네트워크 드라이브 연결과 같은 일반적인 네트워킹 작업에 액세스 기능을 제공합니다.
- 셸 개체: 윈도우 운영 체제 정보를 조작(예를 들어, 레지스트리 액세스)하는 데 필요한 메서드를 제공하는 상용 개체입니다. (일반 개체)
- 특수 폴더: 윈도우에 있는 모든 특수 폴더(My Documents, My Pictures 등)에 대한 액세스.
이들 개체는 여러분 시스템에 관한 정보를 액세스하는 메커니즘으로 설계된 것이 아니라, 일반 작업에 대한 간단한 추상화 형태로 설계된 것입니다. Windows Management Instrumentation (WMI)과 Active Directory Services Interfaces (ADSI)를 사용하면 네트워크와 로컬 기계에 관한 상위 레벨 정보를 액세스할 수 있습니다. 이 두 개체 모델은 여러분의 기계에 관한 거의 모든 정보에 대해 스크립트 가능한 인터페이스를 제공합니다. 이들 개체 모델을 WSH에서 사용하는 방법이 아래에 설명되어 있습니다.
WSH 2.0
WSH 2.0는 다음과 같은 사용자들의 요청 10가지를 수용하여 설계되었습니다.
- 포함 파일 지원
- 다중 엔진 지원
- 고급 툴 지원
- 고급 디버깅
- 타입 라이브러리 상수 액세스
- 스크립트 일시 중지메커니즘
- Stdin/stdout 및 stderr 지원
- 고급 로그온 스크립트 기능
- 드래그 앤 드롭 기능 지원
- 품질이 곧 기능 (다르게 말하면 GPF는 더 이상 원하지 않는 다는 뜻) GPF(General Protection Fault): 응용 프로그램이 점유하고 있지 않은 메모리 영역을 액세스 했을 때 발생하는 오류.
이러한 문제를 해결하기 위해, 우리는 기존의 파일 형식과 소프트웨어 영역 내에서 무엇을 할 수 있을 지에 대해 살펴보았습니다. 몇몇 런타임 요소(고급 디버깅, 드래그 앤 드롭 지원 등)의 경우, WSH 프로그램만 업데이트하면 문제를 간단히 해결할 수 있었습니다. 그러나, 처음 세 가지의 요청을 지원하기 위해서는 일반 스크립트가 제공하는 것 이상의 정보가 필요했습니다. 실질적으로 우리에게 필요했던 것은 파일에 존재하는 몇 가지의 메타 정보(예를 들어, 스크립트 언어 이름)였습니다. 우리는 독자적인 파일 형식을 만들 수도 있었지만, 품질과 인지도를 고려하여 XML을 선택했습니다. 우리에게는 여러 개의 스크립트 엔진을 Windows Script Component (WSC) 형태로 실행 시간에 호스트할 수 있는 XML 파서가 있었기 때문에 이러한 결정을 내리기가 수월했습니다.
우리는 WSC에 필요한 XML 스킴을 검토하고, WSH에는 아무런 의미가 없는 비트(예를 들어, 등록 정보)를 제거한 다음, WSH와 WSC 사이에서 공통 XML 스킴을 공유할 수 있게 해주는 서브 셋을 구성했습니다. 여러분은 이제 한 가지 형식만 알면 되기 때문에 훨씬 더 편하게 작업을 수행할 수 있을 것입니다. XML 파일 형식은 포함 파일, 다중 엔진, 타입 라이브러리 상수, 단일 파일에서의 다중 작업 기능, 그리고 다양한 툴들을 지원합니다. 이것을 가능하게 하는 XML 요소는 다음과 같습니다.
<script> 요소
<script> 요소는 HTML 및 ASP에서 흔히 볼 수 있는 <script> 요소와 매우 유사합니다. 여러분은 스크립트 코드에 대하여 src와 language를 지정할 수 있습니다.
<script language="VBScript"> msgbox "Hello World" </script> <script language="VBScript" src="utils.vbs"/>
<object> 요소
<object> 요소를 사용하면 스크립트 코드 내에서 사용할 수 있는 개체를 작성할 수 있습니다. 여러분은 개체의 이벤트에 응답할 수도 있고, 개체가 제공하는 상수들을 얻을 수도 있습니다. 상수에 익숙하지 않은 사람들을 위해 약간의 설명을 덧붙이자면, 상수는 개체에서 메서드를 호출할 때 사용되는데, 예를 들어, send 메서드를 갖는 전자 메일 개체가 있다고 가정해봅시다. 이 메서드는 전자 메일의 우선순위를 설정할 때 사용되는 매개 변수를 갖습니다. 이 매개 변수에는 보통 우선순위를 결정하는 숫자가 들어가지만, 개체의 개발자는 높은 우선순위에 대한 상수를 0으로, 보통 우선순위에 대한 상수를 1로, 낮은 우선순위에 대한 상수를 2로 간주합니다. 원본 코드에 익숙하지 않은 프로그래머가 코드를 접했을 때 원래의 우선순위 값을 정확하게 알 수 없기 때문에 intHighPriority 같이 알아보기 쉬운 변수를 만들어야 할 것입니다. 상수가 한 두 개일 때는 괜찮겠지만, 수천개의 상수를 갖는 복잡한 개체를 사용할 때는 처리가 불가능할 것입니다. 다행히도 대부분의 개체는 자신의 타입 라이브러리에 이 상수들을 제공합니다. WSH 2.0의 경우, 참reference 속성을 object 요소에 추가하기만 하면, 참조 뿐만 아니라 개체의 인스턴스도 얻을 수 있습니다.
<reference> 요소
스크립트 코드 안에 CreateObject가 있는 경우에는 개체의 인스턴스를 만들지 않고도 타입 라이브러리 정보를 얻을 수 있습니다. 이를 가능하게 만드는 것이 바로 <reference> 요소입니다.
<job> 요소
<job>요소는 <script>, <object>, 그리고 <reference>요소의 부모 요소입니다. 간단한 WSH의 경우에는 한 개의 job 요소만 있으면 됩니다. <job> 요소를 사용하면 한 개의 파일 안에 여러 개의 job을 가질 수 있습니다. 어떤 경우에 이것이 필요할까요? 여러분이 네트워크 관리자라면, 아마 각각의 사용자 타입에 대한 많은 로그온 스크립트(admin, finance, user 등)를 가지고 있을 것입니다. 단 하나의 파일 안에 여러 개의 job을 가질 수 있다는 말은 각 사용자 타입에 대한 job이 하나의 로그온 파일 안에 들어갈 수 있다는 의미가 됩니다. 여러분은 WSH 런타임 프로그램에 있는 job 런타임 스위치를 설정하여 job을 액세스할 수 있습니다. 예를 들어, Logon.ws //job:admin은 admin job을 실행합니다.
예제:
<job> <script language="VBScript"> msgbox "Hello World" </script> </job>.
뛰어난 기능의 XML 요소
새로운 파일 형식에 관해 제가 가장 많이 받는 질문은, "반드시 XML 요소를 전부 다루어야 합니까?"입니다. 저는 이렇게 대답합니다. "XML이 제공하는 새로운 요소를 다루고 싶다면 그래야겠지요" 포함 파일이나 타입 라이브러리가 필요 없고 단일 언어에 만족한다면 기존의 .vbs나 .js 파일이 최상의 솔루션일 것입니다.
사실 새로운 파일 형식은 WSH가 제공하는 새로운 요소 중 일부에 불과합니다. 나머지는 기존의 개체 모델을 확장하여 얻을 수 있으며, 확장은 주로 Windows의 다른 개체 모델이 다루지 못하는 영역에 필요합니다. 로그온 스크립트 사용자들은 종종 사용자가 어떤 사용자 그룹에 속하는 지 결정하는 방법에 대해 물어 옵니다. 이들에게 있어서 아주 중요한 이 정보는 ADSI를 통해 얻을 수 있습니다. WSH 기능을 다시 고안하기 보다는 ADSI가 이 작업을 수행하도록 만드는 것입니다. 하지만, 다른 프로그램과의 통신 연결 기능과 같은 해결해야 할 중요한 문제가 아직도 남아 있습니다. WSH 1.0에서는, COM(Component Object Model)을 지원하는 응용 프로그램만 통신을 할 수 있도록 제한되어 있었습니다. 대부분의 Windows 응용 프로그램이 COM을 지원하기 때문에 이것은 별로 큰 제약이 아닌 것 같아 보이지만, COM을 지원하지 않는 명령-라인 유틸리티나 예전의 응용 프로그램은 어떻게 해야 할까요? 아직도 이러한 응용 프로그램들이 상당히 존재하고 있고, 이 응용 프로그램들을 사용하는 관리자들도 많은 데 말입니다.
이 문제를 해결하기 위해, WSH 2.0은 stdin, stdout, 그리고 stderr 스트림을 지원합니다. 따라서, 사용자는 스크립트와 다른 응용 프로그램을 연결할 수 있고, 명령 라인 환경을 보다 완벽하게 제어할 수 있습니다. 우리는 이 스트림을 제공할 수 있는 최상의 방법이 무엇일까 고심한 끝에, FileSystemObject 라는 결론을 내렸습니다. FileSystemObject는 여러분의 시스템에 있는 파일을 관리하고 텍스트 파일을 열 수 있는 기능을 제공합니다. 텍스트 파일 지원은 스트리밍 모델을 바탕으로, 텍스트 파일을 단일 스트림으로 연 다음, 전체 파일을 읽거나 한 라인씩 스트림을 얻을 수 있게 합니다. 텍스트 파일의 경우에는 이러한 메커니즘이 아주 유용하게 사용되었습니다. 또한, stdin/out/err가 거의 텍스트 기반임을 고려한다면, 스트림에 대해서도 똑같은 개체 모델을 적용하는 것이 가능했습니다. WSH 2.0에서는, WScript 개체에 대한 stdin 속성을 참조하면 stid 개체를 얻을 수 있으며, 일단 참조를 얻고 나면, 그 참조를 FileSystemObject에서 단일의 텍스트 스트림으로 취급할 수 있습니다.
예제:
'========================================================================== ' ' ' NAME: VbsFilter.vbs ' ' COMMENT: 디렉토리 목록을 정렬하고 VBS 파일을 골라낸다. ' ' USAGE: dir | cscript vbsfilter.vbs ' '========================================================================== Dim StdOut, StdIn Set StdOut = WScript.StdOut Set StdIn = WScript.StdIn Dim InputString Do While Not StdIn.AtEndOfStream InputString = StdIn.ReadLine If 0 = StrComp(".vbs", Right(InputString, 4), vbTextCompare) Then StdOut.WriteLine InputString End If Loop
Visual Basic 사용자를 위한 보너스.
stdin/stdout/stderr 지원은 사실상 FileSystemObject로 구현되므로, 여러분은 어떤 Visual Basic 프로그램에서도 stdin/stdout/stderr를 액세스할 수 있습니다. Visual Basic 프로그래머라면 이 기능을 무척 기다려 왔을 것입니다. 추가적인 보너스로, Visual Basic에 사용할 수 있는 VBScript 5.0용 정규식 개체도 얻을 수 있습니다. 이제 WSH 2.0의 베타 2 버전만 설치하면 되는군요.
WSH 2.0은 sendkeys 메서드를 통해 기존의 Windows 응용 프로그램과의 대화를 가능하게 해 주는 기능도 제공합니다. 이 메서드는 Visual Basic과 같은 방식으로 작동합니다. 여러분은 이 메서드를 통해 여러분의 시스템에서 실행되는 특정 응용 프로그램으로 키 입력을 전달할 수 있습니다. 이 메서드는 이전의 셋업 프로그램을 자동화하는 경우에 특히 유용한데, 예를 들어, 여러분은 셋업 프로그램을 시작하는 로그온 스크립트를 작성한 다음, 키 입력을 그 셋업 프로그램에 전달하여 셋업 프로세스를 자동화할 수 있는 것입니다. 이 메서드는 Wshell 개체에 추가되어 있습니다.
예제:
'========================================================================== ' ' ' NAME: Calculater.vbs ' ' COMMENT: Sends keystrokes to calc.exe ' '========================================================================== Dim WshSHell set WshShell = CreateObject("WScript.Shell") WshShell.Run("calc") WScript.Sleep(100) WshShell.AppActivate("Calculator") WScript.Sleep(100) WshShell. SendKeys("1{+}") WScript.Sleep(500) WshShell. SendKeys("2") WScript.Sleep(500) WshShell. SendKeys("~") WScript.Sleep(500) WshShell. SendKeys("*3") WScript.Sleep(500) WshShell. SendKeys("~") WScript.Sleep(2500)
WSH로 Windows 관리하기.
이제 WSH에서 제공하는 새로운 기능을 간략하게 살펴보았으므로, Windows 워크스테이션이나 서버를 관리할 때 그 기능을 어떻게 사용할 수 있는지에 대해 자세히 알아보도록 합시다. WSH로 무엇을 할 수 있는지 설명하기 전에, 기본 제공 WSH 관리 개체, ADSI, 그리고 WMI에 대해 먼저 다루도록 하겠습니다. ADSI와 WMI는 매우 다양한 개체 모델들을 제공하므로, 여기서는 완벽하게 설명하기가 어렵습니다.
기본 제공 개체
기본 제공 개체
WSH는 간단한 네트워크에 Windows의 기본 네트워킹 요소에 대한 메서드 및 속성 셋을 제공합니다. 이 개체는 모든 네트워킹 요소가 아니라 로그온 스크립트에서 주로 사용되는 네트워킹 요소만 제공하도록 설계된 것입니다. WSH로부터 여러분이 원하는 요소를 제공받을 수 없는 경우에는 ADSI를 사용하면 됩니다. 여러분은 로그온 스크립트를 작성할 때, 네트워크 드라이브나 프린터를 연결할 수도 있습니다. 명령 로그온 스크립트의 경우에는, 다음과 같이 코드를 작성합니다.
Net use u: Net use lpt1: \\servername\sharename Echo "you are now connected to the network printer and file share"
위의 코드는 WSH에서 다음과 같이 변환됩니다
' Create reference to the Wscript network object set WshNetwork=CreateObject ("Wscript.Network") ' Call the addprinterconnection method WshNetwork.AddPrinterConnection "lpt1", ' Attach u: to \\servername\sharename WshNetwork.MapNetworkDrive "u:", "\\servername\sharename" ' Tell the user we're all done WScript.Echo "you are now connected to the network printer and file share"
Windows Printers와 WSH 1.0에 익숙한 사람이라면 addprinterconnection 메서드의 단점을 알 수 있을 것입니다. 즉, 이 메서드에서는 사용자가 프린터 포트를 지정해야 합니다. Windows에서는 프린터 포트를 지정할 필요가 없었으며, WSH 1.0의 경우에는 아마도 Printer 폴더 안에 해당 프린터가 표시되지 않을 것입니다. WSH 2.0에서, 우리는 창에 실제 프린터를 추가하는 데 사용되는 addWindowsPrinterConnection을 추가하였습니다.
레지스트리 액세스
툴과 개체를 사용하여 Windows를 관리할 때 여러분이 원하는 대로 작동하지 않는다면, 마지막 해결책은 레지스트리를 편집하는 것입니다. WSH는 Wscript 셸 개체에 대한 Registry 메서드를 제공하여 레지스트리를 액세스할 수 있게 해줍니다.
예제
set WshShell=WScript.CreateObject ("WScript.Shell") WshShell.RegWrite "HKLM\ Hardware\Description\System\ CentralProcessor\0\VendorIdentifier", "Genuine Intel" WshShell.Popup WshShell.RegRead("HKLM\ Hardware\Description\System\ CentralProcessor\0\VendorIdentifier")
파일 시스템
거의 모든 관리 스크립트는 파일 시스템을 액세스해야 합니다. WSH는 스크립트 실행 즉, FileSystemObject (FSO)를 통해 이 기능을 제공합니다. FSO는 드라이브, 디렉토리, 그리고 파일을 액세스하고 각각에 대한 정보를 얻을 때 사용할 수 있는 매우 포괄적인 개체입니다. 여러분은 프로그램을 설치하기 전에 Drive 개체에 대한 AvailableSpace 속성을 검사하여 사용자의 시스템에 충분한 디스크 공간이 남아 있는지 확인할 수 있습니다. FileSystemObject에 대한 자세한 내용은 Microsoft Windows Scripting Technologies Web Site의 in-depth tutorial을 참고하시기 바랍니다. WSH 2.0에 추가된 또 한가지 새로운 요소는 getFileVersion 메서드입니다. 이 메서드는 파일에 대한 버전 정보를 반환합니다. 이 정보를 검사해보면 사용자가 갖고 있는 .dll이나 .exe의 버전을 정확하게 확인할 수 있습니다.
예제
다음으로 사용 가능한 드라이브
set objFS=CreateObject ("Scripting.FileSystemObject") set colDrives=objFS.Drives letter=Asc("c") while objFS.DriveExists(Chr(letter)+":") letter=letter+1 wend Wscript.Echo "use "+Chr(letter)+":"
텍스트 파일 읽기
set objFS=CreateObject ("Scripting.FileSystemObject") set listFile = objFS.OpenTextFile ("c:\windows\system\oeminfo.ini") do while listFile.AtEndOfStream <> True Wscript.Echo listFile.ReadLine loop
ADSI
Active Directory Service Interfaces (ADSI)는 서로 다른 네트워크 업체가 제공하는 다양한 디렉토리 서비스의 기능을 모아 놓은 것으로서, 네트워크 자원을 관리하는 데 필요한 단일의 디렉터리 서비스 인터페이스 셋을 제공합니다. 관리자와 개발자는 ADSI를 사용하여 자원 환경과는 상관없이, 디렉토리 서비스에 있는 자원을 관리할 수 있습니다. 관리자는 ADSI를 통해 사용자와 그룹을 추가하고, 프린터를 관리하고, 네트워크 자원에 대한 사용 허가를 설정하는 등의 일반적인 작업을 관리할 수도 있습니다.
WSG 사용자는 사용자 정의 C++이나 Visual Basic 개체에 의존할 필요 없이, 스크립트에서 직접 네트워크 자원의 정보를 조회할 수 있습니다. ADSI 사용 예로 간단한 사용자-추가 스크립트를 들 수 있습니다. ADSI를 이용한 스크립트 작성의 예가 아래에 나와 있습니다.
' Substiture your companies organization structure here set objDS=GetObject("@Namespace!Company \TopOU\NextLowerOU") ' Call the create method set objUser=objDS.Create ("User","JaneDoe") ' Set the users password objUser.AccountRestrictions.SetPassword ("password") ' Commit the changes objUser.SetInfo
필자는 여기에서 여러 사용자를 동시에 생성시킬 수 있는 더 완벽한 예제를 포함시켰으니 참고하시기 바랍니다.
WMI
WMI 마케팅 웹 사이트를 보면 다음과 같은 제품 설명이 나와 있습니다.
"Windows Management Instrumentation (WMI) 기술은 Common Information Model (CIM)까지 영역을 확장해 나가는 Microsoft Windows 플랫폼에 대한 Desktop Management Task Force(DMTF) Web-Based Enterprise Management (WBEM)의 구현입니다."
쉽게 말해서, 여러분은 이제 스크립트 가능한 개체 모델을 통해 BIOS부터 디스플레이 어댑터 정보까지 여러분의 시스템에 관한 거의 모든 정보를 액세스할 수 있음을 의미하는 것입니다
예제:
' Display the RAM size in the machine strQuery = "Select TotalPhysicalMemory From Win32_LogicalMemoryConfiguration" 'Now execute the query. Call ExecuteQuery(objService, strQuery) Private Sub ExecuteQuery(objService, strQuery) ON ERROR RESUME NEXT Dim objEnumerator, objInstance, strMessage Set objEnumerator = objService.ExecQuery(strQuery) For Each objInstance in objEnumerator If Err.Number Then Err.Clear Else If objInstance is nothing Then Exit Sub Else strMessage = Space(6) & objInstance.TotalPhysicalMemory & " KB" Wscript.Echo strMessage End If End If Next End Sub
WMI는 놀라운 서비스이긴 하지만, 초보자에게는 상당히 까다로울 수 있습니다. 그러나, 일단 기본 모델을 이해하고 나면, 원격 시스템 재부팅이나 프로세스 종료와 같은 강력한 스크립트를 개발할 수 있어 매우 편리하게 사용할 수 있습니다.
요약
Windows Script Host 2.0는 우수한 Windows 관리용 스크립팅 플랫폼을 개발하기 위한 첫번째 시도입니다. 우리는 이 제품이 기능성과 복잡성 면에서 상당히 균형을 취하고 있다는 것을 알게 되었고, 1.0 버전에서 나타났던 많은 문제를 해결할 수 있었습니다. 베타 2는 이 기사와 함께Windows Script 사이트에서 제공되고 있습니다. 제품의 새로운 기능을 확인해 보시고 저희 사이트로 의견을 보내 주십시오. 최종 버전은 Windows 2000와 함께 발표될 예정이며, Windows NT 4.0, Windows 95, Windows 98에서도 사용하실 수 있습니다.