Eine besondere Schwierigkeit stellt oft die Ermittlung des Verbleibs eines Monitors dar, da diese nicht aktiv abgefragt werden können, sondern nur über den angeschlossenen PC. Daher ist es sinnvoll, die ermittelten Daten mit jenen des PCs zu verknüpfen, an dem der Monitor angeschlossen ist. Nicht jeder Monitor kann über WMI abgefragt werden, aber fast alle moderneren Monitore liefern entsprechende Werte zurück.
Verwendete Variablen:
$ActiveMonitors: die am PC angeschlossenen und eingeschalteten Monitore
$monitor: der gerade ausgewertete Monitor im Fall von mehreren
$monitorInfo: die ausgelesenen Informationen der Monitore aus der Variable $mon als Array
$mon: ein neues PowerShell-Objekt, welches Herstellername, PC-Seriennummer, Monitorseriennummer, Modellname, Herstellungswoche und -jahr des Monitors aufnimmt
$pcserial: die Seriennummer des PCs, ist in einem anderen Teil des vollständigen Skripts zu ermitteln
$i: Zähler für die erkannten Monitore
Falls kein Monitor angeschlossen ist, beispielsweise bei Servern oder VMs, sollte diese Fehlerquelle von vornherein abgefangen werden.
try {
$ActiveMonitors = Get-WmiObject -Namespace root\wmi -Class wmiMonitorID
}
catch {
break
$computer.name
}
Die gesammelte Information wird im Array $monitorInfo abgelegt.
$monitorInfo = @()
$pcserial = $serial
$i = 1
foreach ($monitor in $ActiveMonitors)
{
$mon = New-Object PSObject
$manufacturer = $null
$dspserial = $null
$name = $null
$week = $null
$year = $null
Da die Werte codiert hinterlegt sind, müssen sie zunächst in eine lesbare Zeichenkette umgewandelt werden.
Ursprünglich wird beispielsweise die Modellbezeichnung ausgelesen über $monitor.userfriendlyname | foreach { $_ } wie folgt dargestellt:
72
80
32
76
49
57
52
53
119
0
0
0
0
Zu Zeichen umgewandelt mittels [char] $monitor.userfriendlyname | foreach { [char]$_ } lässt die Lesbarkeit immer noch ein wenig zu wünschen übrig:
H
P
L
1
9
4
5
w
Daher erzeugen wir neue Strings, denen wir die einzelnen Zeichen dann hinzufügen:
$monitor.ManufacturerName | foreach {$manufacturer += [char]$_}
$monitor.SerialNumberID | foreach {$dspserial += [char]$_}
$monitor.UserFriendlyName | foreach {$name += [char]$_}
$mon | Add-Member NoteProperty Manufacturer $manufacturer
$mon | Add-Member NoteProperty PCSerial $serial
$mon | Add-Member NoteProperty SerialNumber $dspserial
$mon | Add-Member NoteProperty Name $name
$mon | Add-Member NoteProperty Week $monitor.WeekOfManufacture
$mon | Add-Member NoteProperty Year $monitor.YearOfManufacture
Unnütze Leerzeichen werden eliminiert:
$mon.SerialNumber = $dspserial.trim()
$monitorInfo += $mon
Auf geht's zum nächsten Monitor:
$i++
}
Die fertige Ausgabe ohne Formatierung und Export stellt sich wie folgt dar:
>$monitorInfo
Manufacturer : HWP
PCSerial : ABCDEFG
SerialNumber : CNN8xxxxxx
Name : HP L1945w
Week : 21
Year : 2008
Montag, 19. September 2016
PowerShell: PC Hardware inventarisieren - 5. Monitore
Trackbacks
Trackback-URL für diesen Eintrag
Keine Trackbacks