Herstellen einer Verbindung mit WMI auf einem Remotecomputer

WMI kann verwendet werden, um WMI-Daten auf Remotecomputern zu verwalten und darauf zuzugreifen. Remoteverbindungen in WMI sind von den Windows-Firewall- und DCOM-Einstellungen betroffen. Die Benutzerkontensteuerung (UAC) erfordert möglicherweise auch Änderungen an einigen Einstellungen. Sobald Ihre Einstellungen richtig sind, ähnelt der Aufruf eines Remotesystems jedoch einem lokalen WMI-Aufruf. Sie können es jedoch komplexer gestalten, indem Sie verschiedene Anmeldeinformationen, alternative Authentifizierungsprotokolle und andere Sicherheitsfeatures verwenden.

Konfigurieren eines Computers für eine Remoteverbindung

Bevor Sie mit WMI auf ein Remotesystem zugreifen können, müssen Sie möglicherweise einige Sicherheitseinstellungen überprüfen, um zu bestätigen, dass Sie Zugriff haben. Dies gilt insbesondere in folgenden Fällen:

  • Windows enthält eine Reihe von Sicherheitsfeatures, die den Zugriff auf Skripts auf Remotesystemen blockieren können. Daher müssen Sie möglicherweise die Active Directory- und Windows-Firewall-Einstellungen Ihres Systems ändern, bevor Sie einen WMI-Aufruf ausführen. Weitere Informationen finden Sie unter Einrichten einer WMI-Remoteverbindung und Problembehandlung für eine WMI-Remoteverbindung.

  • Damit eine Remoteverbindung funktioniert, müssen die richtigen DCOM-Einstellungen aktiviert sein. Das Ändern der DCOM-Einstellungen kann Benutzern mit geringen Rechten den Zugriff auf einen Computer für eine Remoteverbindung ermöglichen. Weitere Informationen finden Sie unter Schützen einer WMI-Remoteverbindung.

Darüber hinaus kann es vorkommen, dass Sie WMI über einen festen Port ausführen möchten. Dazu müssen Sie auch Ihre Einstellungen ändern. Weitere Informationen finden Sie unter Einrichten eines festen Ports für WMI.

Herstellen einer Verbindung mit einem Remotecomputer

Im Kern besteht das Herstellen einer Verbindung mit einem Remotesystem mit WMI darin, sicherzustellen, dass Sie über die entsprechenden Berechtigungen für den Zugriff auf das System verfügen, und dass Ihre Verbindung ordnungsgemäß konfiguriert ist. Sobald diese beiden Voraussetzungen erfüllt sind, ist die Verbindung selbst relativ einfach. Wenn Sie beispielsweise Ihre Standard-Sicherheitsanmeldeinformationen verwenden, können Sie mit dem folgenden Code auf einem Remotesystem auf WMI zugreifen:

Herstellen einer Remoteverbindung mit WMI mit PowerShell

Verwenden Sie den Parameter -ComputerName, der für die meisten WMI-Cmdlets wie Get-WmiObject verwendet wird.

$strComputer = "Computer_B"
$colSettings = Get-WmiObject Win32_OperatingSystem -ComputerName $strComputer

Herstellen einer Remoteverbindung mit WMI mit VBScript

Verwenden Sie einen Moniker, der den Namen des Remotesystems im Aufruf von GetObject enthält.

strComputer = "Computer_B"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")

Herstellen einer Remoteverbindung mit WMI mit C#

Verwenden Sie für die aktuelle Version der verwalteten WMI-Schnittstelle (Microsoft.Management.Infrastructure) das CimSession-Objekt, um eine Verbindung mit einem Remotehost darzustellen.

using Microsoft.Management.Infrastructure;
...
string Namespace = @"root\cimv2";
string OSQuery = "SELECT * FROM Win32_OperatingSystem";
CimSession mySession = CimSession.Create("Computer_B");
IEnumerable<CimInstance> queryInstance = mySession.QueryInstances(Namespace, "WQL", OSQuery);

Herstellen einer Remoteverbindung mit WMI mit C#

Verwenden Sie für die Version v1 der verwalteten WMI-Schnittstelle (System.Management) das ManagementScope-Objekt, um eine Verbindung mit einem Remotehost darzustellen.

using System.Management;
...
ManagementScope scope = new ManagementScope("\\\\Computer_B\\root\\cimv2");
scope.Connect();
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_OperatingSystem");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

Beispiel: Abrufen von WMI-Daten von einem Remotecomputer (C++)

Verwenden Sie die IWbemLocator::ConnectServer-Methode, um den Namen des Remotecomputers im strNetworkResource-Parameter anzugeben.

    hres = pLoc->ConnectServer(
        _bstr_t(L"\\\\COMPUTER_B\\root\\cimv2"),
        _bstr_t(useToken?NULL:pszName),    // User name
        _bstr_t(useToken?NULL:pszPwd),     // User password
        NULL,                              // Locale             
        NULL,                              // Security flags
        _bstr_t(useNTLM?NULL:pszAuthority),// Authority        
        NULL,                              // Context object 
        &pSvc                              // IWbemServices proxy
        );

Die vorherigen Codebeispiele sind wohl die einfachste Remoteverbindung, die Sie mit WMI durchführen können. In den Beispielen wird insbesondere Folgendes vorausgesetzt:

  • Sie sind Administrator*in auf dem Remotecomputer. Aufgrund der Benutzerkontensteuerung muss das Konto auf dem Remotesystem ein Domänenkonto in der Gruppe „Administratoren“ sein. Weitere Informationen finden Sie unter „Benutzerkontensteuerung und WMI“.
  • Das Kennwort auf Ihrem aktuellen lokalen Computer ist nicht leer. Dies ist im Wesentlichen eine Windows-Sicherheitsanforderung, dass Sie sich mit einem Kennwort bei Ihrem System angemeldet haben müssen.
  • Ihre lokalen und Remotecomputer befinden sich in derselben Domäne. Wenn Sie Domänengrenzen überschreiten müssen, müssen Sie zusätzliche Informationen bereitstellen oder ein etwas anderes Programmiermodell verwenden.
  • Sie verwenden Ihr eigenes Konto, um auf den Remotecomputer zuzugreifen. Wenn Sie versuchen würden, auf ein anderes Konto zuzugreifen, müssten Sie zusätzliche Anmeldeinformationen angeben. (Beachten Sie, dass der Versuch, lokal mit anderen Anmeldeinformationen als denen Ihres aktuellen Kontos auf WMI zuzugreifen, nicht zulässig ist.)
  • Auf beiden Computern wird IPv6 ausgeführt. WMI unterstützt Verbindungen mit Computern, auf denen IPv6 ausgeführt wird. Allerdings muss sowohl auf Ihrem lokalen Computer als auch auf „Computer_B“ IPv6 ausgeführt werden. Auf beiden Computern kann auch IPv4 ausgeführt werden. Weitere Informationen finden Sie unter IPv6- und IPv4-Unterstützung in WMI.
  • Ihr Skript muss nicht delegieren, d. h. es muss nicht über den Ziel-Remotecomputer auf zusätzliche Remotecomputer zugreifen. Weitere Informationen finden Sie unter Delegieren mit WQL.
  • Sie versuchen, einen bestimmten Aufruf zu tätigen, anstatt einen Remoteprozess zu erstellen. Weitere Informationen finden Sie unter Erstellen von Prozessen per Remotezugriff mithilfe von WMI.

Unter Berücksichtigung dieser Einschränkungen ist ein WMI-Remoteaufruf einem lokalen WMI-Aufruf sehr ähnlich. Der einzige Unterschied besteht darin, dass Sie den Namen des Remotesystems angeben müssen. Sie können jedoch viele dieser Features ändern: Verwenden verschiedener Anmeldeinformationen, Weiterleiten Ihres Anrufs über einen Drittanbietercomputer oder Zugreifen auf eine andere Domäne.