VBScript를 사용하여 원격으로 WMI에 연결

연결 개체를 만들면 VBScript를 사용하여 WMI에 대한 원격 연결을 만들 수 있습니다. 이 개체에는 컴퓨터 이름, 연결할 WMI 네임스페이스, 관련 자격 증명 및 인증 수준이 포함됩니다.

VBScript를 사용하여 원격 시스템에 연결하는 방법

  1. 연결에 대한 원격 컴퓨터 이름, 자격 증명 및 인증 수준 같은 연결 정보를 지정합니다.

    로그온할 때 사용한 것과 동일한 자격 증명(도메인 및 사용자 이름)을 사용하여 원격 컴퓨터에 연결하는 경우, 다음 코드 샘플에서 설명하는 것처럼 GetObject모니커에 연결 정보를 지정할 수 있습니다.

    strComputer = "Computer_B"
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\" & strComputer & "\Root\CIMv2")
    

    일반적으로 원격 컴퓨터에서 연결할 WMI 네임스페이스를 지정해야 합니다. 다른 컴퓨터에서는 기본 네임스페이스가 동일하지 않을 수 있기 때문입니다. 네임스페이스를 지정하면 모든 컴퓨터에서 동일한 네임스페이스에 연결할 수 있습니다.

    모니커 연결을 사용하기 위한 VBScript 상수 및 스크립팅 문자열에 대한 자세한 내용은 VBScript를 사용하여 기본 프로세스 보안 수준 설정을 참조하세요.

  2. 다른 도메인에 있는 원격 컴퓨터에 연결하거나 다른 사용자 이름과 암호를 사용하는 경우에는 SWbemLocator.ConnectServer 메서드를 사용해야 합니다.

    모니커를 사용할 때처럼 ConnectServer를 사용하여 원격 연결에 대한 자격 증명, 인증 수준 및 네임스페이스를 지정합니다. 다음 코드 샘플에서는 ConnectServer를 사용하여 관리자 계정 및 암호를 이용해 원격 컴퓨터에 액세스하는 방법을 설명합니다.

    strComputer = "Computer_B"
    Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
                                                         "Root\CIMv2", _
                                                         "fabrikam\administrator", _
                                                         "password")
    
  3. 원격 연결에 ConnectServer 함수를 사용하는 경우, SWbemServices.Security 호출을 통해 얻은 보안 개체에서 가장 및 인증을 설정합니다. WbemImpersonationLevelEnum 열거형을 사용하여 가장 수준을 지정할 수 있습니다.

    다음 코드 샘플은 이전 VBScript 코드 샘플의 가장 수준을 설정합니다.

    objSWbemServices.Security_.ImpersonationLevel = 3
    

    일부 연결에는 특정 인증 수준이 필요합니다. 자세한 내용은 클라이언트 애플리케이션 프로세스 보안 설정스크립팅 클라이언트 보안을 참조하세요.

    특히 원격 컴퓨터에서 연결하는 네임스페이스가 암호화된 연결이 있어야 데이터를 반환할 수 있다면, 인증 수준을 RPC_C_AUTHN_LEVEL_PKT_PRIVACY 또는 6으로 설정해야 합니다. 이 인증 수준은 네임스페이스에 필요하지 않은 경우에도 사용할 수 있습니다. 이렇게 하면 네트워크를 지날 때 데이터가 암호화됩니다. 허용되는 수준보다 낮은 인증 수준을 설정하려고 하면 액세스 거부 메시지가 반환됩니다. 자세한 내용은 네임스페이스에 대한 암호화된 연결 필요를 참조하세요.

연결이 완료되면 WMI 데이터에 계속 액세스할 수 있습니다. 자세한 내용은 스크립트 및 애플리케이션에 대한 WMI 작업을 참조하세요.

예제

더 큰 VBScript 샘플은 SWbemLocator.ConnectServer 참조 페이지의 예제 섹션에서 확인할 수 있습니다.

다음 VBScript 코드 예제에서는 원격 컴퓨터 이름 배열을 만든 다음 각 컴퓨터에 플러그 앤 플레이 디바이스의 이름(Win32_PnPEntity 인스턴스)을 표시하여, 동일한 도메인에 있는 원격 컴퓨터 그룹에 연결합니다. 아래 스크립트를 실행하려면 원격 컴퓨터의 관리자여야 합니다. 가장 수준 설정 이후 스크립트에 의해 원격 컴퓨터 이름이 추가되려면 "\\"가 필요합니다. WMI 경로에 대한 자세한 내용은 WMI 개체의 위치 설명을 참조하세요.

On Error Resume Next 
arrComputers = Array("Computer1","Computer2","Computer3")
For Each strComputer In arrComputers
    WScript.Echo
    WScript.Echo "===================================="
    WScript.Echo "Computer: "& strComputer
    WScript.Echo "===================================="

    Set objWMIService = GetObject("winmgmts:\\" & strComputer& "\Root\CIMv2") 
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_PnPEntity",,48) 
    For Each objItem in colItems 
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Win32_PnPEntity instance"
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Name: "& objItem.Name
        Wscript.Echo "Status: "& objItem.Status
    Next
Next

다음 VBScript 코드 예제를 사용하면 다른 자격 증명을 사용하여 원격 컴퓨터에 연결할 수 있습니다. 예를 들어 다른 도메인에 있는 원격 컴퓨터나 다른 사용자 이름과 암호가 필요한 원격 컴퓨터에 연결합니다. 이 경우에는 SWbemServices.ConnectServer 연결을 사용합니다.

' Full Computer Name
' can be found by right-clicking My Computer,
' then click Properties, then click the Computer Name tab)
' or use the computer's IP address
strComputer = "FullComputerName" 
strDomain = "DOMAIN" 
Wscript.StdOut.Write "Please enter your user name:"
strUser = Wscript.StdIn.ReadLine 
Set objPassword = CreateObject("ScriptPW.Password")
Wscript.StdOut.Write "Please enter your password:"
strPassword = objPassword.GetPassword()
 
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
                                                     "Root\CIMv2", _
                                                     strUser, _
                                                     strPassword, _
                                                     "MS_409", _
                                                     "ntlmdomain:" + strDomain)
Set colSwbemObjectSet = objSWbemServices.ExecQuery("Select * From Win32_Process")
For Each objProcess in colSWbemObjectSet
    Wscript.Echo "Process Name: " & objProcess.Name 
Next

원격 컴퓨터에서 WMI에 연결