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


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

Вы можете создать удаленное подключение к WMI с помощью VBScript, создав объект подключения. Этот объект содержит имя компьютера, пространство имен 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 выполняется подключение к группе удаленных компьютеров в том же домене путем создания массива имен удаленных компьютеров, а затем отображения имен 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 на удаленном компьютере