VBScript를 사용하여 WMI에 연결

WMI 스크립트는 C++ 프로그램에 필요한 많은 단계를 압축할 수 있습니다. SWbemLocator 개체뿐만 아니라 모니커 "winmgmts:"를 통해 WMI에 연결할 수도 있습니다. 모니커는 WMI에서 네임스페이스, 클래스 또는 인스턴스를 찾는 약식 이름입니다. "winmgmts:"라는 이름은 WMI 개체를 사용하도록 Windows 스크립트 호스트에 지시하고, 기본 네임스페이스에 연결하고, SWbemServices 개체를 가져오는 WMI 모니커입니다. 가장 수준이나 특정 클래스 또는 인스턴스 같은 기타 연결 정보는 모니커 이름 뒤에 오는 문자열에 표시됩니다. WMI 개체를 만들거나 가져오는 호출에서 모니커를 사용할 수 있습니다. 자세한 내용은 모니커 문자열 만들기를 참조하세요.

다음 절차에서는 SWbemLocator를 사용하여 WMI에 연결하는 방법을 설명합니다.

SWbemLocator를 사용하여 WMI에 연결하는 방법

  1. CreateObject를 호출하여 로케이터 개체를 검색합니다.

    Set Locator = CreateObject("WbemScripting.SWbemLocator")
    
  2. ConnectServer 메서드 호출을 사용하여 네임스페이스에 로그온합니다.

    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objService = objLocator.ConnectServer(".", "root\cimv2")
    

    ConnectServer 호출에서 컴퓨터를 지정하지 않으면 WMI가 로컬 컴퓨터에 연결됩니다. 네임스페이스를 지정하지 않으면 WMI는 레지스트리 키에 지정된 네임스페이스에 연결됩니다.

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WBEM\Scripting\Default Namespace

    기본 네임스페이스는 \root\cimv2입니다. 네임스페이스에 대한 자세한 내용은 WMI 내에서 계층 구조 만들기를 참조하세요.

  3. SWbemServices.Security_ 메서드를 호출하여 가장 수준을 설정합니다.

    objService.Security_.ImpersonationLevel = 3 
    

    자세한 내용은 VBScript를 사용하여 기본 프로세스 보안 수준 설정을 참조하세요.

  4. 스크립트의 목적을 구현합니다.

    WMI는 네트워크를 통해 데이터에 액세스하고 데이터를 조작하는 데 사용하는 다양한 스크립팅 개체를 노출합니다. 자세한 내용은 클래스 및 인스턴스 정보 조작WMI용 스크립팅 API를 참조하세요.

    Set objLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objService = objLocator.ConnectServer(".", "root\cimv2")
    objService.Security_.ImpersonationLevel = 3
    Set Jobs = objService.ExecQuery("SELECT * FROM Win32_ScheduledJob")
    i=0
    For each Job in Jobs
        i = i+1   
        WScript.Echo Job.JobId & "  " & Job.Command & VBNewLine
    Next
    If i = 0 Then
        WScript.Echo "No Jobs Scheduled with the AT command were found"
    End If
    

다음 절차에서는 모니커를 사용하여 WMI에 연결하고 개체를 검색하는 방법을 설명합니다.

모니커를 사용하여 WMI에 연결하고 개체를 검색하는 방법

  1. 입력 매개 변수에서 모니커를 사용하여 GetObject를 호출합니다.

    'the simple version
    Set MyObject = GetObject("winMgmts::Win32_scheduledJob")
    
    'Or the more complex version
    strComputer = "."
    Set MyObject = GetObject("winMgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\Root\CIMv2:Win32_ScheduledJob")
    

    모니커에는 WMI에 연결하는 데 사용할 수 있는 여러 요소가 포함되어 있습니다.

    • "winmgmts:"는 스크립팅 API 개체를 사용하도록 WSH에 지시합니다. 이 예제에서 WSH는 시스템의 첫 번째 Win32_scheduledJob을 설명하는 SWbemObject를 반환해야 한다는 사실을 알게 됩니다. 모니커가 설명하는 내용에 따라 SWbemCollection 또는 SWbemServices 개체가 반환될 수도 있습니다.

    • 필요한 경우 연결에 대한 보안 수준을 설정할 수 있습니다. 그러나 모니커에서는 이름 및 암호 정보를 설정할 수는 없습니다. 자세한 내용은 스크립팅 클라이언트 보안을 참조하세요.

    • 필요한 겨우 WMI 개체의 경로를 정의할 수 있습니다. 여기에는 로컬 또는 원격 컴퓨터, 네임스페이스 및 클래스 이름이 포함됩니다. WMI 스크립트에서 VBScript GetObject를 사용하는 자세한 방법은 인스턴스 만들기WMI 인스턴스 검색을 참조하세요.

  2. 단일 항목이나 컬렉션을 검색하는 대신, (이전 예제에서 설명하는 것처럼) SWbemServices 개체를 검색할 수도 있습니다. 이렇게 하면 반환된 개체에 대해 추가 쿼리를 호출할 수 있습니다.

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    Set colScheduledJobs = objWMIService.ExecQuery("Select * from Win32_ScheduledJob")
    For Each objJob in colScheduledJobs
        Wscript.Echo "Job ID: " & objJob.JobId & "Command: " & objJob.Command & VBNewLine
    Next
    

    이전 예제에서 가장 또는 impersonationLevel=3은 기본 프로세스 보안 수준입니다. 다음 예제에서는 프로세스 변경을 위임하도록 변경할 필요가 없는 한, 이 프로세스 보안 수준을 지정하지 않아도 됩니다. 자세한 내용은 VBScript를 사용하여 기본 프로세스 보안 수준 설정을 참조하세요.

WMI에서의 스크립팅