WMI-Klassen nach Klassennamen durchsuchen

WMI-Klassen gibt es wie Sand am Meer. Wenn ich mir nicht mehr sicher bin, wie meine gewünschte Klasse heißt, so starte ich einfach eine Suche nach dem Klassennamen mit einem Suchkriterium, hier z.B. “network”. Als Ergebnis erhalte ich dann alle Klassen-Bezeichnungen die mit “Win32″ beginnen und “network” enthalten.

1
Get-Wmiobject -list | Select-Object Name | Select-String -pattern "Win32\w+network"

Windowsversion ermitteln und ausgeben

Für ein Loginskript habe ich einige häufig verwendete Windowsparameter, wie z.B. die Version, Edition, Architektur, das Service Pack und den Produktnamen abgefragt. Als Informationsquelle nutze ich die Registry und WMI.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Windows Edition per Registry ermitteln
$tmp_WinPN = Get-ItemProperty "HKLM:\Software\Microsoft\Windows NT\CurrentVersion" | Select-Object ProductName
$tmp_WinPN.ProductName
 
# Windows Service Pack per Registry ermitteln
$tmp_WinSP = Get-ItemProperty "HKLM:\Software\Microsoft\Windows NT\CurrentVersion" | Select-Object CSDVersion
$tmp_WinSP.CSDVersion
 
# Windows-Version per WMI ermitteln
$tmp_WinVer = Get-Wmiobject "Win32_OperatingSystem" | Select-Object Version
$tmp_WinVer.Version
 
# Architektur  per WMI ermitteln
$tmp_ProcArc = Get-Wmiobject "Win32_Processor" | Select-Object AddressWidth
[String]::Concat($tmp_ProcArc.AddressWidth,"-Bit")

Installierte Windows-Hotfixes anzeigen

Per WMI kann man sich ganz einfach alle lokal installierten Windows-Hotfixes anzeigen lassen, aber auch die von entfernten Computern.

Und so geht’s:

1
2
3
4
5
6
7
8
9
10
11
12
$colItems = get-wmiobject "Win32_QuickFixEngineering" -namespace "root\CIMV2"
 
foreach ($objItem in $colItems)
{
	write-host "ID: " $objItem.HotFixID
	write-host "Beschreibung: " $objItem.Description
	write-host "Kommentar: " $objItem.FixComments
	write-host "Installiert am: " $objItem.InstalledOn
	write-host "Installiert von: " $objItem.InstalledBy
	write-host "Betroffenenes Service Pack: " $objItem.ServicePackInEffect
	write-host
}

WMI-Zeitformat in lesebares Format konvertieren

In dem ersten Beispiel wird ganz einfach das Datum und die Uhrzeit des letzten PC-Neustarts per WMI ausgelesen. Leider stellt man nun fest, dass dies ein anderes Format (WMI-Format) hat, als das, was wir sonst gewohnt sind.

1
Get-WmiObject -Class Win32_OperatingSystem -Property LastBootUpTime

Das folgende Beispiel macht genau das selbe, aber wandelt das Format mit “ConvertToDateTime” in ein gut lesbares vom Typ “System.DateTime” um.

1
2
$temp = Get-WmiObject -Class Win32_OperatingSystem -Property LastBootUpTime
$temp.ConvertToDateTime($temp.LastBootUpTime)