Tag 6: WMI und CIM
1 Windows Management Instrumentation (WMI)​
WMI ist seit Windows 2000 ein Teil von Windows. Es kann genutzt werden, um fast alle Eigenschaften von einem Gerät (auch über Remote) herauszulesen. Powershell hat standardmässig einen vollen WMI-Support. Um alle WMI-Commands auszulesen, kann das Get-Command
Cmdlet genutzt werden.
get-command -noun WMI*
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Get-WmiObject 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Invoke-WmiMethod 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Register-WmiEvent 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Remove-WmiObject 3.1.0.0 Microsoft.PowerShell.Management
Cmdlet Set-WmiInstance 3.1.0.0 Microsoft.PowerShell.Management
Eine Alternative zu WMI ist Common Information Model (CIM). Es wurde in PowerShell v3.0 eingeführt. CIM kann auf Windows, sowie auf nicht-Windows Rechnern genutzt werden. Auch hier kann das Cmdlet Get-Command
genutzt werden um alle CIM-Commands anzuzeigen.
get-command -module cimcmdlets
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Export-BinaryMiLog 1.0.0.0 cimcmdlets
Cmdlet Get-CimAssociatedInstance 1.0.0.0 cimcmdlets
Cmdlet Get-CimClass 1.0.0.0 cimcmdlets
Cmdlet Get-CimInstance 1.0.0.0 cimcmdlets
Cmdlet Get-CimSession 1.0.0.0 cimcmdlets
Cmdlet Import-BinaryMiLog 1.0.0.0 cimcmdlets
Cmdlet Invoke-CimMethod 1.0.0.0 cimcmdlets
Cmdlet New-CimInstance 1.0.0.0 cimcmdlets
Cmdlet New-CimSession 1.0.0.0 cimcmdlets
Cmdlet New-CimSessionOption 1.0.0.0 cimcmdlets
Cmdlet Register-CimIndicationEvent 1.0.0.0 cimcmdlets
Cmdlet Remove-CimInstance 1.0.0.0 cimcmdlets
Cmdlet Remove-CimSession 1.0.0.0 cimcmdlets
Cmdlet Set-CimInstance 1.0.0.0 cimcmdlets
WMI und CIM können auch mit SQL-Abfragen genutzt werden.
get-wmiobject -query 'select * from win32_bios'
Allerdings kann auch das normale Powershell-Schema genutzt werden.
get-wmiobject win32_bios
Zum Cmdlet get-wmiobject
gibt es den Alias gwmi
2 Übungen zu WMI​
Schreiben Sie eine Funktion, welche die freie Diskkapazität pro Disk in GB in einer Hashtable zurückgibt (Win32_LogicalDisk).
gwmi win32_logicaldisk | foreach {$_.name, ($_.freespace /1GB)}
Schreiben Sie eine Funktion, welche die totale RAM-Kapazität in GB zurückgibt (Win32_PhysicalMemory).
gwmi win32_physicalmemory | foreach {$_.capacity /1GB}
gwmi win32_physicalmemory | foreach {$_.capacity /1GB} | measure -sum | foreach {$_.sum}
Schreiben Sie eine Funktion, welche die freie RAM-Kapazität zurückgibt (Win32_OperatingSystem).
gwmi win32_operatingsystem | foreach {$_.freephysicalmemory /1E+6}
Schreiben Sie eine Funktion, welche alle lokalen Benutzer (Benutzernamen) in einem Array zurückgibt (Win32_UserAccount).
gwmi win32_useraccount | foreach {$_.name}
Schreiben Sie eine Funktion, welche Name und Pfad aller Freigaben zurückgibt.
gwmi win32_share | select {$_.name, $_.path}
gwmi win32_share | foreach {$_.name, $_.path}