Поделиться через


Удаленное подключение к WMI с помощью VBScript

Вы можете создать удаленное подключение к WMI с помощью VBScript, создав объект подключения. Этот объект содержит имя компьютера, пространство имен WMI, к которому требуется подключиться, а также любые соответствующие учетные данные и уровни проверки подлинности.

Подключение к удаленной системе с помощью VBScript

  1. Укажите сведения о подключении, такие как имя удаленного компьютера, учетные данные и уровень проверки подлинности для подключения.

    Если вы подключаетесь к удаленному компьютеру с теми же учетными данными (доменом и именем пользователя), с которыми вы вошли, вы можете указать сведения о подключении в GetObjectmoniker, как описано в следующем примере кода.

    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 подключается к группе удаленных компьютеров в одном домене путем создания массива имен удаленных компьютеров, а затем отображения имен устройств Plug and Play — экземпляров 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 на удаленном компьютере