Eigene Registry-Werte werden auf 64-Bit-Systemen nicht inventarisiert, solange sie nicht unter Wow6432Node stehen? Die Ursache ist die Provider-Architektur – mit zwei Klassen ist das Problem gelöst.
Ein Klassiker bei der Erweiterung der Hardwareinventur: Eigene Werte unter HKLM\SOFTWARE\Hersteller\Anwendung werden auf 32-Bit-Clients sauber erfasst, auf 64-Bit-Clients aber nicht – es sei denn, man legt die Daten zusätzlich unter HKLM\SOFTWARE\Wow6432Node ab.
Die Ursache
Der Configuration-Manager-Client verwendet zum Auslesen der Registry den WMI-Provider RegPropProv. Ohne weitere Angabe läuft dieser auf 64-Bit-Systemen im 32-Bit-Kontext und sieht wegen der Registry-Umleitung nur den Zweig Wow6432Node. Die Lösung: Für die 64-Bit-Sicht wird eine zweite Klasse definiert, die den Provider ausdrücklich in der 64-Bit-Architektur anspricht.
Configuration.mof: Was ausgelesen wird
#pragma namespace ("\\\\.\\root\\cimv2")
#pragma deleteclass("CWD_AppInfo", NOFAIL)
[DYNPROPS]
class CWD_AppInfo
{
[key] string KeyName;
string StartTime;
string EndTime;
string Status;
};
[DYNPROPS]
instance of CWD_AppInfo
{
KeyName = "Anwendung";
[PropertyContext("Local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Hersteller\\Anwendung|StartTime"), Dynamic, Provider("RegPropProv")] StartTime;
[PropertyContext("Local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Hersteller\\Anwendung|EndTime"), Dynamic, Provider("RegPropProv")] EndTime;
[PropertyContext("Local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Hersteller\\Anwendung|Status"), Dynamic, Provider("RegPropProv")] Status;
};
Denselben Block legen Sie ein zweites Mal als Klasse CWD_AppInfo_64 an.
Was gemeldet wird: die Reporting-Klassen
Entscheidend sind die Kontext-Qualifizierer, die die Provider-Architektur festlegen:
[SMS_Report(TRUE), SMS_Group_Name("CWD_AppInfo"), SMS_Class_ID("CWD|CWD_AppInfo|1.0"),
SMS_Context_1("__ProviderArchitecture=32|uint32"),
SMS_Context_2("__RequiredArchitecture=true|boolean")]
class CWD_AppInfo : SMS_Class_Template { ... };
[SMS_Report(TRUE), SMS_Group_Name("CWD_AppInfo_64"), SMS_Class_ID("CWD|CWD_AppInfo_64|1.0"),
SMS_Context_1("__ProviderArchitecture=64|uint32"),
SMS_Context_2("__RequiredArchitecture=true|boolean")]
class CWD_AppInfo_64 : SMS_Class_Template { ... };
Die 32-Bit-Klasse liefert die Werte aus Wow6432Node (bzw. von 32-Bit-Systemen), die 64-Bit-Klasse die Werte aus dem nativen Zweig. Im Bericht fassen Sie beide Views per UNION zusammen.
Ausrollen
- Die Erweiterung der
Configuration.mofauf dem Primary Site Server speichern – sie wird automatisch an die Clients verteilt. - Die Reporting-Klassen in Configuration Manager 2012 und neuer nicht mehr in die
SMS_def.mofschreiben, sondern als MOF-Datei unter Clienteinstellungen › Hardwareinventur › Klassen festlegen › Importieren einlesen. - Den Hardwareinventurzyklus auf den Clients abwarten oder manuell auslösen.
Tipp
Das Community-Werkzeug RegKeyToMOF erzeugt beide MOF-Abschnitte – inklusive 32- und 64-Bit-Variante – automatisch aus einem Registry-Schlüssel und erspart viel Tipparbeit und Syntaxfehler.
Heute
Die ursprüngliche Anleitung bezog sich auf ConfigMgr 2007 mit SMS_def.mof. Das Prinzip der zwei Architekturen gilt in Configuration Manager Current Branch unverändert; nur der Weg zum Einlesen der Reporting-Klassen hat sich geändert. Da 32-Bit-Windows kaum noch eine Rolle spielt, genügt in vielen Umgebungen inzwischen die 64-Bit-Klasse.