Wie bereits in folgendem Blog Eintrag beschrieben, ist es wichtig, dass bei der SCCM Hardware Inventur zwischen 32 Bit und 64 Bit Systemen unterschieden werden muss.
Ich wollte auf allen Systemen unabhängig von der OS Architektur den Wert des Registry Keys HKLM\SOFTWARE\YOURCOMPANY\Department auslesen
Ich hatte nun das Problem, dass in der SQL Tabelle NULL Werte inventarisiert wurden, obwohl alles scheinbar fehlerfrei konfiguriert war. Dieser Fehler trat sporadisch und unabhängig von der OS Architektur auf. Teilweise wurde von den Systemen ein Wert zurückgeliefert und Tage später wiederum nicht.
Ich hatte für die Inventur die nachfolgenden Einstellungen in der configuration.mof und sms_def.mof vorgenommen:
configuration.mof
#pragma namespace ("\\\\.\\root\\cimv2") #pragma deleteclass("CustomHINV86", NOFAIL) [DYNPROPS] class CustomHINV86 { [key] string KeyName = ""; string Department; };
[DYNPROPS] instance of CustomHINV86 { KeyName="CustomHINV"; [PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\YOURCOMPANY|Department"), Dynamic, Provider("RegPropProv")] Department; };
#pragma namespace ("\\\\.\\root\\cimv2") #pragma deleteclass("CustomHINV64", NOFAIL) [DYNPROPS] class CustomHINV64 { [key] string KeyName = ""; string Department; }; [DYNPROPS] instance of CustomHINV64 { KeyName="CustomHINV"; [PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\YOURCOMPANY|Department"), Dynamic, Provider("RegPropProv")] Department; };
|
sms_def.mof
#pragma namespace ("\\\\.\\root\\cimv2\\SMS") #pragma deleteclass("CustomHINV86", NOFAIL) [SMS_Report(TRUE), SMS_Group_Name("Your Custom HINV"), SMS_Class_ID("YOURCOMPANY|Your Custom HINV|1.0"), SMS_Context_1 ("__ProviderArchitecture=32|uint32"), SMS_Context_2 ("__RequiredArchitecture=true|boolean")] Class CustomHINV86: SMS_Class_Template { [SMS_Report(TRUE),key] string KeyName; [SMS_Report(TRUE)] String Department; }; #pragma namespace ("\\\\.\\root\\cimv2\\SMS") #pragma deleteclass("CustomHINV64", NOFAIL) [SMS_Report(TRUE), SMS_Group_Name("Your Custom HINV"), SMS_Class_ID("YOURCOMPANY|Your Custom HINV|1.0"), SMS_Context_1 ("__ProviderArchitecture=64|uint32"), SMS_Context_2 ("__RequiredArchitecture=true|boolean")] Class CustomHINV64: SMS_Class_Template { [SMS_Report(TRUE),key] string KeyName; [SMS_Report(TRUE)] String Department; };
|
Das Resultat war ein Eintrag in der Datenbank wie nachfolgend aufgelistet:
|
ResourceID |
GroupID |
RevisionID |
AgentID |
TimeStamp |
Department0 |
KeyName0 |
|
33 |
1 |
3 |
1 |
14.09.2010 16:59:19 |
NULL |
CustomHINV |
Und genau hier ist das Problem!
Da die Hardware Inventur Anpassung für beide möglichen OS Architekturen ausgelegt ist, müssten zwei Einträge pro System in der Tabelle erscheinen. Ich hatte anschließend die Einträge mit denen von funktionierenden Hardware Inventur Anpassungen verglichen und kam schnell auf das Ergebnis.
Die Einträge wurden überschrieben, da die Eindeutigkeit der Spalte KeyName0 fehlte. Dies erklärt auch das sporadische Auftreten. Je nachdem in welcher Reihenfolge die Inventur (32 oder 64 Bit) in die Datenbank geschrieben wurde, wurde anschließend die zuerst geschriebene von der zweiten überschrieben.
Die korrekten Einträge müssten bei einem 64 Bit System folgendermaßen aussehen:
|
ResourceID |
GroupID |
RevisionID |
AgentID |
TimeStamp |
Department0 |
KeyName0 |
|
33 |
1 |
3 |
1 |
14.09.2010 16:59:19 |
NULL |
CustomHINV86 |
|
33 |
1 |
3 |
1 |
14.09.2010 16:59:19 |
MeinWert |
CustomHINV64 |
Somit muss die configuration.mof folgendermaßen aussehen:
configuration.mof
#pragma namespace ("\\\\.\\root\\cimv2") #pragma deleteclass("CustomHINV86", NOFAIL) [DYNPROPS] class CustomHINV86 { [key] string KeyName = ""; string Department; }; [DYNPROPS] instance of CustomHINV86 { KeyName="CustomHINV86"; [PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\YOURCOMPANY|Department"), Dynamic, Provider("RegPropProv")] Department; }; #pragma namespace ("\\\\.\\root\\cimv2") #pragma deleteclass("CustomHINV64", NOFAIL) [DYNPROPS] class CustomHINV64 { [key] string KeyName = ""; string Department; }; [DYNPROPS] instance of CustomHINV64 { KeyName="CustomHINV64"; [PropertyContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\YOURCOMPANY|Department"), Dynamic, Provider("RegPropProv")] Department; };
|