Herstellen einer Remoteverbindung mit WMI mit VBScript
Sie können eine Remoteverbindung zum 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 mithilfe von VBScript eine Verbindung mit einem Remotesystem her
Geben Sie die Verbindungsinformationen an, z. B. den Namen des Remotecomputers, die Anmeldeinformationen und die Authentifizierungsebene für die Verbindung.
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 GetObject-Moniker 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 auf dem Remotecomputer hergestellt werden soll. Dies liegt daran, dass es möglich ist, dass der Standardnamespace auf verschiedenen Computern nicht identisch ist. Wenn Sie den Namespace angeben, wird sichergestellt, dass Sie auf allen Computern eine Verbindung mit demselben Namespace herstellen.
Weitere Informationen zu den VBScript-Konstanten und Skripting-Zeichenfolgen für die Verwendung der Monikerverbindung finden Sie unter Festlegen der Standardprozesssicherheitsstufe mithilfe von VBScript.
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 Methode SWbemLocator.ConnectServer 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 beschrieben, wie ConnectServer mithilfe eines Administratorkontos und Kennworts auf einen Remotecomputer zugegriffen wird.
strComputer = "Computer_B" Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator") Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _ "Root\CIMv2", _ "fabrikam\administrator", _ "password")
Wenn Sie die Funktion ConnectServer für Remoteverbindungen verwenden, legen Sie Identitätswechsel und Authentifizierung für das Sicherheitsobjekt fest, das durch einen Aufruf von SWbemServices.Security abgerufen wurde. Sie können die Enumeration WbemImpersonationLevelEnum verwenden, um die Identitätswechselebene anzugeben.
Im folgenden Codebeispiel wird die Identitätswechselebene für das vorherige VBScript-Codebeispiel festgelegt.
objSWbemServices.Security_.ImpersonationLevel = 3
Beachten Sie, dass für einige Verbindungen eine bestimmte Authentifizierungsebene erforderlich ist. Weitere Informationen finden Sie unter Festlegen von Clientanwendungsprozesssicherheit und Schützen 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 Authentifizierungsebene auch dann verwenden, wenn sie für den Namespace nicht erforderlich ist. Dadurch wird sichergestellt, dass die Daten auf ihrem Weg durch das Netzwerk verschlüsselt werden. Wenn Sie versuchen, eine niedrigere Authentifizierungsebene als zulässig festzulegen, wird eine Nachricht mit Zugriffsverweigerung zurückgegeben. Weitere Informationen finden Sie unter Anfordern einer verschlüsselten Verbindung zu einem Namespace.
Nachdem Sie die 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.
Im folgenden VBScript-Codebeispiel wird eine Verbindung mit einer Gruppe von Remotecomputern in derselben Domäne hergestellt, indem ein Array von Remotecomputernamen erstellt und dann die Namen der Plug & Play Geräte – Instanzen von Win32_PnPEntity – auf jedem Computer angezeigt werden. Zum Ausführen des folgenden Skripts müssen Sie Administrator auf den Remotecomputern sein. Beachten Sie, dass das erforderliche "\\" vor dem Namen des Remotecomputers vom Skript hinzugefügt wird, das der Einstellung Identitätswechselebene folgt. Weitere Informationen zu WMI-Pfaden finden Sie unter Beschreiben 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 unterschiedlicher Anmeldeinformationen eine Verbindung mit einem Remotecomputer herstellen. Beispielsweise ein Remotecomputer in einer anderen Domäne oder eine Verbindung mit einem Remotecomputer, der einen anderen Benutzernamen und ein anderes Kennwort erfordert. Verwenden Sie in diesem Fall die Verbindung 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
Zugehörige Themen