Herstellen einer Verbindung mit WMI auf einem Remotecomputer

WMI kann verwendet werden, um WMI-Daten auf Remotecomputern zu verwalten und darauf zu zugreifen. Remoteverbindungen in WMI sind von den Einstellungen Windows Firewall und DCOM betroffen. Die Benutzerkontensteuerung (User Account Control, UAC) erfordert möglicherweise auch Änderungen an einigen Einstellungen. Wenn Ihre Einstellungen jedoch korrekt sind, ähnelt der Aufruf eines Remotesystems einem lokalen WMI-Aufruf. Sie können es jedoch komplexer machen, indem Sie unterschiedliche 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-Firewalleinstellungen Ihres Systems ändern, bevor Sie einen WMI-Aufruf tätigen. Weitere Informationen finden Sie unter Einrichten einer WMI-Remoteverbindung und Problembehandlung bei einer Remote-WMI-Verbindung.

  • Die richtigen DCOM-Einstellungen müssen aktiviert sein, damit eine Remoteverbindung funktioniert. 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 Sichern einer WMI-Remoteverbindung.

Darüber hinaus kann es unter bestimmten Umständen sein, 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 ihre Verbindung ordnungsgemäß konfiguriert ist. Sobald Sie über diese beiden Elemente verfügen, ist die Verbindung selbst relativ einfach. Wenn Sie beispielsweise Ihre Standardsicherheitsanmeldeinformationen verwenden, können Sie mithilfe des folgenden Codes auf WMI auf einem Remotesystem zugreifen:

Herstellen einer Remoteverbindung mit WMI mitHilfe von PowerShell

Verwenden Sie den Parameter -ComputerName, der den meisten WMI-Cmdlets gemeinsam ist, z. B. Get-WmiObject.

$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 zu darstellen.

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 v1-Version der von WMI verwalteten Schnittstelle (System.Management) das ManagementScope-Objekt, um eine Verbindung mit einem Remotehost zu darstellen.

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 parameter strNetworkResource 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 grundlegendste Remoteverbindung, die Sie mit WMI ausführen können. In den Beispielen wird insbesondere Folgendes angenommen:

  • Sie sind Administrator auf dem Remotecomputer. Aufgrund der Benutzerkontensteuerung mussdas Konto auf dem Remotesystem ein Domänenkonto in der Gruppe Administratoren sein. Weitere Informationen finden Sie unter Benutzerkontensteuerung und WMI.
  • Das Kennwort auf Dem aktuellen lokalen Computer ist nicht leer. Dies ist im Wesentlichen Windows Sicherheitsanforderung, dass Sie sich mit einem Kennwort bei Ihrem System angemeldet haben müssen.
  • Sowohl Ihr lokaler als auch der Remotecomputer befinden sich in derselben Domäne. Wenn Sie Domänengrenzen überschreiten müssen, müssen Sie zusätzliche Informationen liefern oder ein etwas anderes Programmiermodell verwenden.
  • Sie verwenden Ihr eigenes Konto für den Zugriff auf den Remotecomputer. Wenn Sie versuchen, auf ein anderes Konto zu zugreifen, müssen Sie zusätzliche Anmeldeinformationen angeben. (Beachten Sie, dass der Versuch, lokal mit Anmeldeinformationen, die sich von Ihrem aktuellen Konto unterscheiden, auf WMI zu zugreifen, 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 wird möglicherweise auch IPv4 ausgeführt. Weitere Informationen finden Sie unter IPv6- und IPv4-Unterstützung in WMI.
  • Ihr Skript muss nicht delegieren. Das heißt, es muss nicht über den Ziel-Remotecomputer auf zusätzliche Remotecomputer zugreifen. Weitere Informationen finden Sie unter Delegieren mit WMI.
  • Sie versuchen, einen bestimmten Aufruf zu erstellen, anstatt einen Remoteprozess zu erstellen. Weitere Informationen finden Sie unter Remote erstellen von Prozessen mit WMI.

Vor diesem Hintergrund ist ein Remote-WMI-Aufruf einem lokalen WMI-Aufruf sehr ähnlich. Der einzige Unterschied besteht in der Angabe des Namens des Remotesystems. Sie können jedoch viele dieser Features ändern: verwenden Sie unterschiedliche Anmeldeinformationen, weiterleiten Sie Ihren Anruf über einen Drittanbietercomputer, oder greifen Sie auf eine andere Domäne zu.