Herstellen einer Verbindung mit WMI Remote mit VBScript

Sie können eine Remoteverbindung mit WMI mit VBScript erstellen, indem Sie ein Verbindungsobjekt erstellen. Dieses Objekt enthält den Namen des Computers, den WMI-Namespace, mit dem Sie eine Verbindung herstellen möchten, sowie alle relevanten Anmeldeinformationen und Authentifizierungsebenen.

So stellen Sie eine Verbindung mit einem Remotesystem mithilfe von VBScript her

  1. Geben Sie die Verbindungsinformationen wie den Namen des Remotecomputers, anmeldeinformationen und die Authentifizierungsebene für die Verbindung an.

    Wenn Sie eine Verbindung mit einem Remotecomputer mit den gleichen Anmeldeinformationen (Domäne und Benutzername) herstellen, mit denen Sie angemeldet sind, können Sie die Verbindungsinformationen in einem GetObjectmoniker angeben, wie im folgenden Codebeispiel beschrieben.

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

    Im Allgemeinen sollten Sie den WMI-Namespace angeben, mit dem eine Verbindung mit dem Remotecomputer hergestellt werden soll. Dies liegt daran, dass der Standardnamespace nicht auf verschiedenen Computern identisch ist. Wenn Sie den Namespace angeben, wird sichergestellt, dass Sie eine Verbindung mit demselben Namespace auf allen Computern herstellen.

    Weitere Informationen zu VBScript-Konstanten und Skriptzeichenfolgen für die Verwendung der Monikerverbindung finden Sie unter Festlegen der Standardsicherheitsebene mit VBScript.

  2. Wenn Sie eine Verbindung mit einem Remotecomputer in einer anderen Domäne herstellen oder einen anderen Benutzernamen und ein anderes Kennwort verwenden, müssen Sie die SWbemLocator.ConnectServer-Methode verwenden.

    Wie bei einem Moniker verwenden Sie ConnectServer , um die Anmeldeinformationen, die Authentifizierungsebene und den Namespace für die Remoteverbindung anzugeben. Im folgenden Codebeispiel wird die Verwendung von ConnectServer zum Zugreifen auf einen Remotecomputer mithilfe eines Administratorkontos und eines Kennworts beschrieben.

    strComputer = "Computer_B"
    Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
    Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
                                                         "Root\CIMv2", _
                                                         "fabrikam\administrator", _
                                                         "password")
    
  3. Legen Sie bei Verwendung der ConnectServer-Funktion für Remoteverbindungen den Identitätswechsel und die Authentifizierung für das von einem Aufruf von SWbemServices.Security abgerufene Sicherheitsobjekt fest. Sie können die Aufzählung WbemImpersonationLevelEnum verwenden, um Identitätswechselebene anzugeben.

    Im folgenden Codebeispiel wird die Identitätswechselebene für das vorherige VBScript-Codebeispiel festgelegt.

    objSWbemServices.Security_.ImpersonationLevel = 3
    

    Beachten Sie, dass einige Verbindungen eine bestimmte Authentifizierungsebene erfordern. Weitere Informationen finden Sie unter Festlegen von Clientanwendungsprozesssicherheit und Sichern von Skriptclients.

    Insbesondere sollten Sie die Authentifizierungsebene auf RPC_C_AUTHN_LEVEL_PKT_PRIVACY oder 6 festlegen, wenn der Namespace, mit dem Sie eine Verbindung auf dem Remotecomputer herstellen, eine verschlüsselte Verbindung erfordert, bevor daten zurückgegeben werden. Sie können diese Authentifizierungsstufe auch verwenden, auch wenn der Namespace sie nicht benötigt. Dadurch wird sichergestellt, dass Daten verschlüsselt werden, da sie das Netzwerk überschreitet. Wenn Sie versuchen, eine niedrigere Authentifizierungsebene als zulässig festzulegen, wird eine Zugriffsverweigerungsnachricht zurückgegeben. Weitere Informationen finden Sie unter Erfordern einer verschlüsselten Verbindung mit einem Namespace.

Nachdem Sie Ihre Verbindung hergestellt haben, können Sie weiterhin auf WMI-Daten zugreifen. Weitere Informationen finden Sie unter WMI-Aufgaben für Skripts und Anwendungen.

Beispiele

Ein größeres VBScript-Beispiel finden Sie im Abschnitt "Beispiele" auf der Referenzseite "SWbemLocator.ConnectServer" .

The following VBScript code example connects to a group of remote computers in the same domain by creating an array of remote computer names and then displaying names of the Plug and Play devices—instances of Win32_PnPEntity—on each computer. Um das folgende Skript auszuführen, müssen Sie ein Administrator auf den Remotecomputern sein. Beachten Sie, dass die "\\" vor dem Namen des Remotecomputers durch das Skript hinzugefügt wird, nachdem die Einstellung der Identitätswechselstufe folgt. Weitere Informationen zu WMI-Pfaden finden Sie unter Beschreibung des Speicherorts eines WMI-Objekts.

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

Im folgenden VBScript-Codebeispiel können Sie mithilfe verschiedener Anmeldeinformationen eine Verbindung mit einem Remotecomputer herstellen. Ein Remotecomputer in einer anderen Domäne oder eine Verbindung mit einem Remotecomputer erfordert beispielsweise einen anderen Benutzernamen und ein anderes Kennwort. Verwenden Sie in diesem Fall die SWbemServices.ConnectServer-Verbindung .

' 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

Herstellen einer Verbindung mit WMI auf einem Remotecomputer