Von web master auf Mittwoch, 09. November 2011
Kategorie: DSM

Computertyp in DSM

Wie viele andere meiner Kunden, würde auch ich gerne die DSM Eigenschaft "CurrentComputer.Computer.ComuterType" dafür nutzen, verschiedene Zuweisungen (wie z.B. VPN Client) zu steuern. Leider gibt es mit dieser Eigenschaft verschiedene Probleme, die eine sinnvolle Nutzung verhindern:

Um diese Probleme zu umgehen, bietet das WMI Interface die passenden Möglichkeiten. Im Namespace "\\root\cimv2\Win32_SystemEnclosure" findet sich die Property "ChassisType" die einen von 24 Integer Werten beinhalten kann.
Die Werte sind wie folgt definiert:

1=Other
2=Unknown
3=Desktop
4=Low Profile Desktop
5=Pizza Box
6=Mini Tower
7=Tower
8=Portable
9=Laptop
10=Notebook
11=Hand Held
12=Docking Station
13=All in One
14=Sub Notebook
15=Space-Saving
16=Lunch Box
17=Main System Chassis
18=Expansion Chassis
19=Sub Chassis
20=Bus Expansion Chassis
21=Peripheral Chassis
22=Storage Chassis
23=Rack Mount Chassis
24=Sealed-Case PC

Nun kann ein eScript geschrieben werden, dass diese WMI Property ausliest, die erhaltene Werte in lesbare strings umwandelt und in eine clientseitige Schemaerweiterung schreibt, die zuvor angelegt wird. Folgend ein Beispiel aus einer script.inc die so übernommen werden kann:

!
!*************************************************************
!- Get chassistypes
!*************************************************************
!- Get chassistype definition from WMI
WMIGetIndexData('\\.\root\cimv2','Win32_SystemEnclosure','0','_WMI_')
ChassisTypes
EndProc
!
!- configure default
Set('_chassisType','Desktop')
!
!- Chassistype "1" is unknown and every machine is used with this state is used as virtualmachine
If %_WMI_ChassisTypes%='1'
Set('_chassisType','Virtual')
!- configure chassistype "8", "9", "10", "11", "12" and "14" as Laptop
If %_WMI_ChassisTypes%='8' or %_WMI_ChassisTypes%='9' or %_WMI_ChassisTypes%='10' or %_WMI_ChassisTypes%='11' or %_WMI_ChassisTypes%='12' or %_WMI_ChassisTypes%='14'
Set('_chassisType','Notebook')
!- configure chassistype "23" as Rackep-Up (Server)
If %_WMI_ChassisTypes%='23'
Set('_chassisType','Rackedup')
!
ModifyObjectProperty(f_CurrentComputer,'CustomMyClntProps','ChassisType','%_chassisType%')
ExitProcEx(Done,'WMI ChassisType: %_WMI_ChassisTypes%; Resolved Chassis Type: %_chassisType%')

Nun kann über die Variable (für dieses Beispiel) "CurrentComputer.CustomMyClntProps.ChassisType" der Wert in weiteren eScript's, Serverside Prerequisites und in dynamischen Gruppen abgefragt werden. Dies ist ein Grundkonstrukt, was 90% aller Hardwaretypen abdeckt. Da es aber auch diverse Hardware (oftmals Hersteller mit Discounter Character) gibt die den ChassisType nicht einpflegen, wird das Script mit einem ExitProcEx(Done) beendet und der wirklich in der WMI Property gespeicherte Wert in die Bemerkungen der Policyinstanz geschrieben. Somit lässt sich über die DSMC relativ einfach die Rückgabe des Wertes überwachen und ggf. Feintuning im Script einbauen. Zum Beispiel könnte die zusätzliche Abfrage auf "CurrentComputer.BasicInventory.Vendor" im Falle von "ChassisType=1" integriert werden, um zusätzlich nochmals virtuelle Maschinen explizit abzufangen.

Verwandte Beiträge

Kommentare hinterlassen