Abrufen von WMI-Objekten (Get-WmiObject)
WMI (Windows Management Instrumentation, Windows-Verwaltungsinstrumentation) ist eine Kerntechnologie der Windows-Systemverwaltung, weil diese eine Vielzahl von Informationen einheitlich verfügbar macht. Durch die vielen Möglichkeiten von WMI ist das Windows PowerShell-Cmdlet für den Zugriff auf WMI-Objekte, Get-WmiObject, eines der wichtigsten Cmdlets für die tägliche Arbeit. Im Folgenden werden der Zugriff auf WMI-Objekte mit Get-WmiObject sowie bestimmte Aufgaben mit WMI-Objekten beschrieben.
Auflisten von WMI-Klassen
Bei der ersten Verwendung von WMI sind Benutzer häufig mit dem Problem konfrontiert, dass sie gar nicht wissen, welche Aufgaben sich mit WMI überhaupt durchführen lassen. WMI-Klassen beschreiben die Ressourcen, die verwaltet werden können. Es gibt Hunderte von WMI-Klassen, die z. T. Dutzende Eigenschaften enthalten.
Dieses Problem kann mit Get-WmiObject gelöst werden, da WMI damit auffindbar gemacht wird. Sie können eine Liste der auf dem lokalen Computer verfügbaren WMI-Klassen abrufen, indem Sie Folgendes eingeben:
PS> Get-WmiObject -List __SecurityRelatedClass __NTLMUser9X __PARAMETERS __SystemSecurity __NotifyStatus __ExtendedStatus Win32_PrivilegesStatus Win32_TSNetworkAdapterSettingError Win32_TSRemoteControlSettingError Win32_TSEnvironmentSettingError ...
Sie können dieselben Informationen auch von einem Remotecomputer abrufen, indem Sie mit dem ComputerName-Parameter einen Computernamen oder eine IP-Adresse angeben:
PS> Get-WmiObject -List -ComputerName 192.168.1.29 __SystemClass __NAMESPACE __Provider __Win32Provider __ProviderRegistration __ObjectProviderRegistration ...
Die von Remotecomputern zurückgegebene Klassenauflistung kann abhängig vom Betriebssystem auf dem Computer und den WMI-Erweiterungen abweichen, die durch installierte Anwendungen hinzugefügt wurden.
Hinweis: | |
Wenn Sie mit Get-WmiObject eine Verbindung mit einem Remotecomputer herstellen, muss auf diesem WMI ausgeführt werden. Außerdem muss das von Ihnen verwendete Konto in der Standardkonfiguration zur Gruppe der lokalen Administratoren auf dem Remotecomputer gehören. Auf dem Remotesystem muss Windows PowerShell nicht installiert sein. Dadurch können Sie Betriebssysteme verwalten, auf denen keine Windows PowerShell installiert ist, aber WMI verfügbar ist. |
Sie können ComputerName sogar beim Verbinden mit dem lokalen System verwenden. Als Computernamen können Sie den Namen des lokalen Computers, dessen IP-Adresse (oder die Loopbackadresse 127.0.0.1) oder das WMI-Format (".") verwenden. Wenn Sie Windows PowerShell auf dem Computer "Admin01" mit der IP-Adresse 192.168.1.90 ausführen, geben alle folgenden Befehle die WMI-Klassenauflistung für diesen Computer zurück:
Get-WmiObject -List Get-WmiObject -List -ComputerName . Get-WmiObject -List -ComputerName Admin01 Get-WmiObject -List -ComputerName 192.168.1.90 Get-WmiObject -List -ComputerName 127.0.0.1 Get-WmiObject -List -ComputerName localhost
Get-WmiObject verwendet standardmäßig den Namespace "root/cimv2". Wenn Sie einen anderen WMI-Namespace verwenden möchten, geben Sie mit dem Namespace-Parameter den entsprechenden Namespacepfad an:
PS> Get-WmiObject -List -ComputerName 192.168.1.29 -Namespace root __SystemClass __NAMESPACE __Provider __Win32Provider ...
Anzeigen von Einzelheiten zu WMI-Klassen
Wenn Sie den Namen einer WMI-Klasse bereits kennen, können Sie mit diesem sofort Informationen abrufen. Häufig wird zum Abrufen von Informationen zu einem Computer die Win32_OperatingSystem-WMI-Klasse verwendet.
PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . SystemDirectory : C:\WINDOWS\system32 Organization : Global Network Solutions BuildNumber : 2600 RegisteredUser : Oliver W. Jones SerialNumber : 12345-678-9012345-67890 Version : 5.1.2600
Hier werden alle Parameter angezeigt, doch es ist auch noch ein kompakterer Ausdruck möglich. Der ComputerName-Parameter ist zum Verbinden mit dem lokalen System nicht erforderlich. Er dient hier nur zur Darstellung der allgemeinen Verwendung und zur Erinnerung an diesen Parameter. Namespace besitzt den Standardwert "root/cimv2" und kann daher ebenfalls ausgelassen werden. Und schließlich erlauben die meisten Cmdlets das Auslassen des Namens häufig verwendeter Parameter. Wenn für den ersten Parameter von Get-WmiObject kein Name angegeben wird, dieser von Windows PowerShell als Class-Parameter behandelt. Daher hätte der letzte Befehl auch folgendermaßen eingegeben werden können:
Get-WmiObject Win32_OperatingSystem
Die Win32_OperatingSystem-Klasse verfügt über weit mehr Eigenschaften als hier aufgeführt sind. Sie können mit Get-Member alle Eigenschaften anzeigen. Die Eigenschaften einer WMI-Klasse sind automatisch verfügbar, wie auch andere Objekteigenschaften:
PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Get-Member -MemberType Property TypeName: System.Management.ManagementObject#root\cimv2\Win32_OperatingSyste m Name MemberType Definition ---- ---------- ---------- __CLASS Property System.String __CLASS {... ... BootDevice Property System.String BootDevic... BuildNumber Property System.String BuildNumb... ...
Anzeigen weiterer Eigenschaften mit Format-Cmdlets
Wenn Sie Informationen in der Win32_OperatingSystem-Klasse anzeigen möchten, die standardmäßig nicht angezeigt werden, können Sie die Format-Cmdlets verwenden. Wenn Sie z. B. die verfügbaren Arbeitsspeicherdaten anzeigen möchten, geben Sie Folgendes ein:
PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-Table -Property TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles TotalVirtualMemorySize TotalVisibleMem FreePhysicalMem FreeVirtualMemo FreeSpaceInPagi ory ry ngFiles --------------- --------------- --------------- --------------- --------------- 2097024 785904 305808 2056724 1558232
Hinweis: | |
Platzhalter können mit Eigenschaftennamen in Format-Table verwendet werden, daher kann das abschließende Pipelineelement zu Format-Table -Property TotalV*,Free* reduziert werden. |
Die Arbeitsspeicherdaten sind einfacher zu lesen, wenn Sie sie als Liste formatieren:
PS> Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 -ComputerName . | Format-List TotalVirtualMemorySize,TotalVisibleMemorySize,FreePhysicalMemory,FreeVirtualMemory,FreeSpaceInPagingFiles TotalVirtualMemorySize : 2097024 TotalVisibleMemorySize : 785904 FreePhysicalMemory : 301876 FreeVirtualMemory : 2056724 FreeSpaceInPagingFiles : 1556644