Geek School Verwenden von PowerShell zum Abrufen von Computerinformationen
WMI und sein neuerer Bruder CIM können beide zur Verwaltung der Windows-Computer in Ihrer Umgebung verwendet werden. Aber kennen Sie den Unterschied zwischen ihnen? Begleiten Sie uns, wenn wir einen Blick darauf werfen.
Lesen Sie unbedingt die vorherigen Artikel der Serie:
- Erfahren Sie, wie Sie Windows mit PowerShell automatisieren
- Verwenden von Cmdlets in PowerShell
- Informationen zum Verwenden von Objekten in PowerShell
- Lernen Sie das Formatieren, Filtern und Vergleichen in PowerShell
- Informationen zum Verwenden von Remoting in PowerShell
Und bleiben Sie die ganze Woche für den Rest der Serie dran.
Einführung
WMI steht für Windows Management Instrumentation. Der Begriff „Instrumentation“ bezieht sich auf die Tatsache, dass Sie mit WMI Informationen über den internen Zustand Ihres Computers abrufen können, ähnlich wie die Instrumente des Armaturenbretts in Ihrem Fahrzeug Informationen über den Zustand der internen Komponenten Ihres Fahrzeugs abrufen und anzeigen können.
WMI besteht aus einem Repository, das Klassen enthält, die Komponenten darstellen, die in Ihrem Computer verwaltet werden können. Damit ist gemeint, nur weil WMI über eine Win32_Battery-Klasse verfügt, bedeutet dies nicht, dass Ihre Maschine eine Batterie enthält. Diese Klassen können dann lokal oder sogar über ein Netzwerk nach Informationen abgefragt werden, wobei eine Abfragesprache verwendet wird, die SQL sehr ähnlich ist, WQL genannt. Es ist jedoch bekannt, dass WMI sehr unzuverlässig ist, hauptsächlich aufgrund der Tatsache, dass es auf RPC (Remote Procedure Calls) basiert, die einige verrückte Dinge mit den Ports tun, über die sie kommunizieren.
Beginnend mit Windows 8 und Server 2012 wird WMI zugunsten des Common Information Model oder kurz CIM eingestellt. Der einzige Unterschied zwischen WMI und CIM sind die verwendeten Transportprotokolle. Während WMI Abfragen mit Remote Procedure Calls durchführt, verwendet CIM HTTP, was einen großen Unterschied macht. Im Backend sprechen sie immer noch mit demselben Informationsspeicher.
WMI verwenden
Der schnellste und einfachste Weg, um die Informationen zu ermitteln, die Ihnen über WMI zur Verfügung stehen, besteht darin, eine Kopie eines beliebigen freien WMI-Objektbrowsers zu erhalten. Wir mögen dieses hier. Starten Sie nach dem Download die grafische Oberfläche, um die WMI-Klassen zu durchsuchen.
Wenn Sie etwas über die Festplattenkonfiguration eines Computers herausfinden möchten, drücken Sie die Tastenkombination Strg + F, um ein Suchfeld aufzurufen. Geben Sie dann "Logicdisk" ein und drücken Sie die Eingabetaste.
Sofort gelangen Sie zur Klasse Win32_LogicalDisk.
In der unteren Hälfte der Anwendung sehen Sie zwei Instanzen der Klasse.
Sobald wir die gewünschte Klasse haben, ist die Abfrage von PowerShell einfach.
Get-WmiObject -Query "SELECT * FROM Win32_LogicalDisk"
Ich habe diese Syntax seit einiger Zeit nicht mehr mit Leuten gesehen, die die neue parametrisierte Syntax bevorzugen.
Get-WmiObject -Class Win32_LogicalDisk
Wenn Sie die Informationen von einem anderen Computer in Ihrem Netzwerk abrufen möchten, können Sie einfach den Parameter ComputerName verwenden.
Get-WmiObject -Class Win32_LogicalDisk -Computername Viper -Credential Viper \ Administrator
CIM verwenden
Wenn Sie bedenken, dass CIM nur unter Windows 8 und Server 2012 verfügbar ist, ist dies definitiv der richtige Weg.
Get-CimInstance -ClassName Win32_LogicalDisk
Bei der Verwendung von Get-CimInstance gibt es auch einen Tab-Abschluss für den -ClassName-Parameter. Dies zeigt, dass hier die Bemühungen von Microsoft im Mittelpunkt stehen.
Tatsächlich wurde WMI von einem völlig separaten Team innerhalb von Microsoft entwickelt, wurde jedoch später von den Verantwortlichen von PowerShell übernommen. Sie waren es, die gemerkt haben, dass es sehr schwer sein wird, das WMI zu beseitigen, das WMI hinterlassen hat. Um Abhilfe zu schaffen, versuchen sie, WMI und CIM besser verfügbar zu machen, indem sie Wrapper-Cmdlets schreiben, die WMI und CIM unter der Haube verwenden. Die einzige Möglichkeit, um zu überprüfen, ob ein Cmdlet ein Wrapper ist, besteht in der Dokumentation. Das Cmdlet Get-Hotfix ist beispielsweise ein Wrapper für die Klasse Win32_QuickFixEngineering, wie in der Dokumentation dargestellt.
Dies bedeutet, dass Sie die Hotfixes auf Remote-Computern mithilfe des Cmdlets Get-HotFix anstelle einer WMI-Abfrage abrufen können.
Get-HotFix -ComputerName localhost
Also da hast du es. Denken Sie jedoch daran, dass ein dediziertes Cmdlet immer verwendet werden soll, gefolgt von CIM, falls kein Cmdlet vorhanden ist. Wenn alles andere fehlschlägt oder Sie ältere Computer in Ihrer Umgebung haben, möchten Sie WMI verwenden. Das ist alles was ich für diese Zeit habe. Bis morgen für mehr PowerShell-Spaß.