Windows-Remoteverwaltung und WMI
Die Windows-Remoteverwaltung kann verwendet werden, um Daten abzurufen, die von der Windows-Verwaltungsinstrumentation (WMI und MI) verfügbar gemacht werden. Sie können WMI-Daten mit Skripts oder Anwendungen abrufen, die die WinRM-Skript-API verwenden, oder über das Winrm-Befehlszeilentool .
WinRM unterstützt die meisten vertrauten WMI-Klassen und -Vorgänge, einschließlich eingebetteter Objekte. WinRM kann WMI nutzen, um Daten zu Ressourcen zu sammeln oder Ressourcen unter einem Windows-basierten Betriebssystem zu verwalten. Das bedeutet, dass Sie Daten zu Objekten wie Datenträgern, Netzwerkadaptern, Diensten oder Prozessen in Ihrem Unternehmen über den vorhandenen Satz von WMI-Klassen abrufen können. Sie können auch auf die Hardwaredaten zugreifen, die über den WMI-Standard-IPMI-Anbieter verfügbar sind.
Identifizieren einer WMI-Ressource
Sie können auf eine WMI-Klasse als Ressource in WinRM und im WS-Management-Protokoll verweisen: ein Typ von verwalteter Entität, z. B. ein Dienst oder ein Datenträger.
Eine WMI-Klasse oder -Methode wird durch einen URI identifiziert, genau wie jede andere Ressource bei Verwendung des WS-Management-Protokolls. Der URI kann eine WMI-Ressource (-Klasse), eine WMI-Aktion (-Methode) angeben oder eine bestimmte instance einer Klasse in Nachrichten identifizieren, die über ein Netzwerk gesendet werden. Weitere Informationen finden Sie unter Ressourcen-URIs.
Erstellen des URI-Präfixes für WMI-Klassen
Das URI-Präfix enthält einen festen Teil und den WMI-Namespace. Beispielsweise lautet das URI-Präfix in Windows Server, das den festen Teil des Präfix enthält: http://schemas.microsoft.com/wbem/wsman/1/wmi/<WmiNamespace>
. Dadurch kann das URI-Präfix für jeden WMI-Namespace generiert werden. Um beispielsweise auf den WMI-Namespace root\default zuzugreifen, verwenden Sie das folgende URI-Präfix: http://schemas.microsoft.com/wbem/wsman/1/wmi/root/default/
.
Die meisten WMI-Klassen für die Verwaltung befinden sich im Namespace root\cimv2 . Verwenden Sie das URI-Präfix, um auf Klassen und Instanzen im Namespace root\cimv2 zuzugreifen: http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/
. Weitere Informationen finden Sie unter Ressourcen-URIs.
Generieren eines vollständigen URI für WMI-Klassen
Der URI, den Sie für das Winrm-Befehlszeilentool oder ein Skript bereitstellen, besteht aus dem Präfix und der Ressourcenspezifikation.
Im folgenden Verfahren wird beschrieben, wie Sie einen Ressourcen-URI generieren, um entweder eine WMI-Klasse abzurufen oder in einem Aufzählungsvorgang zu verwenden.
So generieren Sie einen Ressourcen-URI für eine WMI-Klasse
Beginnen Sie mit dem Präfix, das angibt, WS-Management Protokollschema verwendet werden soll.
https://schemas.microsoft.com/wbem/wsman/1
Das Ressourcen-URI-Präfix für WMI-Klassen ist immer identisch. Weitere Informationen finden Sie unter URI-Präfixe.
Fügen Sie dem Präfix den WMI-Namespace hinzu.
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/
Fügen Sie den Klassennamen hinzu.
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service
Um den Wert einer Eigenschaft festzulegen oder eine bestimmte Methode aufzurufen, fügen Sie den erforderlichen Schlüsselwert oder die erforderlichen Werte für die Klasse hinzu.
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=Winmgmt
Wenn Sie den Schlüsselwert leer lassen, ändern Sie den ursprünglichen Eigenschaftswert nicht.
Hinweis
Wenn der Schlüsselwert leer bleibt, wird der Eigenschaftswert auf NULL festgelegt.
Suchen einer WMI-Ressource mit WinRM
Sie können WMI-Daten entweder über das Befehlszeilentool Winrm oder über ein Visual Basic-Skript abrufen, das die WinRM-Skript-API verwendet. Sie verwenden keinen WMI-Pfad , um eine Ressource zu suchen. Stattdessen konvertieren Sie den WMI-Namespace und die WMI-Hierarchie in einen URI.
Der WinRM-URI für eine WMI-Klasse enthält zwei Teile: das URI-Präfix und die Klasse, auf die Sie zugreifen möchten.
Beispielsweise kann der folgende URI für die Session.Enumerate-Methode bereitgestellt werden, um alle Dienste auf einem Computer aufzulisten. Das URI-Präfix ist http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/
, und die Klasse ist Win32_Service.
strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_CurrentTime"
Listen Sie in WMI die Daten für alle Instanzen einer Ressource oder Klasse auf verschiedene Arten auf:
Eine Abfrage für alle Instanzen dieser Ressource.
Set colServices = objWMIService.ExecQuery("Select * from Win32_Service")
Ein Aufruf von SWbemServices.InstancesOf oder SWbemObject.Instances_.
Set colServices = InstancesOf("Win32_Service")
In WinRM gibt es eine Möglichkeit, alle Instanzen einer Ressource aufzulisten: Session.Enumerate.
strResource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service"
Set colServices = objSession.Enumerate( strResource )
Suchen einer bestimmten Instanz einer WMI-Ressource
In WMI können Sie einen bestimmten instance einer Klasse festlegen, indem Sie entweder Werte für die Schlüsseleigenschaften angeben oder einen instance abfragen, der einer Liste von Eigenschaftenwerten entspricht. Schlüsseleigenschaften verfügen über den WMI-Schlüsselqualifizierer.
Sie können eine bestimmte instance einer Klasse auf verschiedene Arten abrufen:
Ein Aufruf von Session.Enumerate mit den Filter - und Dialektparametern zum Erstellen einer Abfrage.
RemoteComputer = "servername.domain.com" strDialect = "http://schemas.microsoft.com/wbem/wsman/1/WQL" strResource = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/*" Set objWsman = CreateObject("Wsman.Automation") Set objSession = objWsman.CreateSession("https://" & RemoteComputer) strFilter = "SELECT * FROM Win32_Share WHERE Name='Admin$'" Set objResultSet = objSession.Enumerate(strResource, strFilter, strDialect)
Ein Aufruf von SWbemServices.Get. Für Session.Get müssen Sie einen oder mehrere bestimmte Schlüsselwerte angeben, voran ein Fragezeichen (?).
Das Format des URI für eine bestimmte instance ist
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/WMI_Class?Key1=Value
.strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=winmgmt"
Eine WMI-Klasse kann über mehrere Schlüssel verfügen. Schlüsselname-Wert-Paare werden durch ein "+"-Zeichen getrennt. In diesem Fall ist das Format:
http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Key1=Value1+Key2=Value2
.Die WinRM-Syntax zum Abrufen eines Singleton-WMI-Objekts unterscheidet sich von WMI. Ein Singleton ist eine WMI-Klasse, die so definiert ist, dass nur eine instance zulässig ist. Win32_CurrentTime oder Win32_WMISetting sind Beispiele für eine WMI-Singletonklasse.
Die WMI-Syntax für Singletons wird im folgenden VBScript-Codebeispiel gezeigt.
Set TimeObject = objWMIService.Get("Win32_CurrentTime=@")
Das folgende Beispiel zeigt die WinRM-Singletonsyntax, die "@" nicht verwendet.
strResourceUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_CurrentTime"
Hinzufügen eines Selektors zu einem ResourceLocator- oder IWSManResourceLocator-Objekt .
Im folgenden VBScript-Codebeispiel wird veranschaulicht, wie sie mithilfe eines Selektors eine bestimmte instance von Win32_Processor abrufen.
strUri = "http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Processor" Set objWsman = CreateObject("Wsman.Automation") Set Session = objWsman.CreateSession Set Locator = objWsman.CreateResourceLocator(strUri) Locator.AddSelector "DeviceID", "CPU0"