Summary
SCCM 2007 does not report back information about Number of Cores.
Symptoms
The SCCM2007 does not report back information about Number of Cores (NumberOfCores). Therefore, no information about number of cores can be imported into FNMP.
The number of cores data is important for core-based licenses -- such that of Microsoft Server licenses. Make sure the following changes are applied on production environment, and on any PoC.
Cause
The NumberOfCores data is part of Win32_Processor WMI class. However, in SCCM 2007, the reporting of Processor data is NOT retrieved from Win32_Processor class, but instead retrieved from SMS_Processor. The SMS_Processor class does not include the NumberOfCores data.
Resolution
To work around this issue, the SCCM 2007 can be custom configured so that NumberOfCores data is gathered by inventory clients and reported back in to SCCM.
Once the NumberOfCores data is available in SCCM 2007 database, the FNMP?s connector for SCCM needs to be patch to make it read the new NumberOfCores data from SCCM.
Follow these steps:
1. Add a new custom data class entry into configuration.mof file. On SCCM 2007, open the configuration.mof file in a notepad. The default location of the file is ?C:\Program Files\Microsoft Configuration Manager\inboxes\clifiles.src\hinv?.
Copy the following text and paste it at the
bottom of the configuration.mof.
//----------------------------------------------------------------
// Flexera Data Class
//----------------------------------------------------------------
#pragma namespace("\\\\.\\root\\cimv2")
[Union,ViewSources{"select DeviceID,Name,NumberOfCores,NumberOfLogicalProcessors from Win32_Processor"},ViewSpaces{"\\\\.\\root\\cimv2"},
dynamic,Provider("MS_VIEW_INSTANCE_PROVIDER")]
class FNMP_Processor
{
[PropertySources{"DeviceID"},key]
string DeviceID;
[PropertySources{"Name"}]
string Name;
[PropertySources{"NumberOfCores"}]
uint32 NumberOfCores;
[PropertySources{"NumberOfLogicalProcessors"}]
uint32 NumberOfLogicalProcessors;
};
2. Add a new custom reporting class entry into sms_def.mof file. On SCCM 2007, open the sms_def.mof file in a notepad. The default location of the file is ?C:\Program Files\Microsoft Configuration Manager\inboxes\clifiles.src\hinv?.
Copy the following text and paste it at the bottom of the sms_def.mof.
//----------------------------------------------------------------
// Flexera Reporting Class
//----------------------------------------------------------------
// Extends Processor data
// Exposes the NumberOfCores and NumberOfLogicalProcessors.
[ SMS_Report (TRUE),
SMS_Group_Name ("FNMP_Processor"),
SMS_Class_ID ("CUSTOM|FNMP_Processor|1.0") ]
class FNMP_Processor : SMS_Class_Template
{
[SMS_Report (TRUE),key]
string DeviceID;
[SMS_Report (TRUE)]
string Name;
[SMS_Report (TRUE) ]
uint32 NumberOfCores;
[SMS_Report (TRUE) ]
uint32 NumberOfLogicalProcessors;
};
This custom reporting class is configured to report additional processor data such as NumberOfCores and NumberOfLogicalProcessors, in addition to processor?s name.
3. Modify SCCM connector in FNMP. Open the file ?Computer.xml? in a notepad. The file?s default location is ?C:\Program Files\ManageSoft\Compliance\ImportProcedures\Inventory\Reader\SMS?.
NOTE: You only have to do this step for FNMP prior 9.0 version.
Search for the section named "ReadProcessorSpeed", and replace its content (only the content of that section) so that the final outcome would be just like so:
<Reader xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
Name="ReadProcessorSpeed"
....>
<![CDATA[
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'v_GS_FNMP_Processor0' AND COLUMN_NAME = 'NumberOfCores0')
BEGIN
--Runs when SCCM client was custom configured (sms_def.mof) to return number of cores from Processor_Ext custom WMI class.
EXECUTE ('
SELECT p.MachineID AS MachineID,
p.MaxClockSpeed0 AS MaxClockSpeed,
LTRIM(RTRIM(p.Name0)) AS ProcessorType,
ISNULL(pe.NumberOfCores0,0) AS NumberOfCores
FROM dbo.Processor_DATA AS p
LEFT JOIN dbo.v_GS_FNMP_Processor0 pe ON pe.ResourceID = p.MachineID AND pe.DeviceID0 = p.DeviceID0')
END
ELSE IF EXISTS (SELECT 'x' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Processor_DATA' AND COLUMN_NAME = 'NumberOfCores00')
BEGIN
EXECUTE ('
SELECT p.MachineID AS MachineID,
p.MaxClockSpeed0 AS MaxClockSpeed,
LTRIM(RTRIM(p.Name0)) AS ProcessorType,
p.NumberOfCores00 AS NumberOfCores
FROM dbo.Processor_DATA AS p')
END
ELSE
BEGIN
EXECUTE ('
SELECT p.MachineID AS MachineID,
p.MaxClockSpeed0 AS MaxClockSpeed,
LTRIM(RTRIM(p.Name0)) AS ProcessorType,
NULL AS NumberOfCores
FROM dbo.Processor_DATA AS p')
END
]]>
</Reader>
In addition, for devices that don?t report NumberOfCores in SCCM, we need to have their NumberOfCores set to zero. On the same file, search for the section named ?PopulateComputerResults?, and within it change the line:
From: ic.NumberOfCores = ISNULL(pin.NumberOfCores, 1),
To: ic.NumberOfCores = ISNULL(pin.NumberOfCores, 0),
4. The mof file may need to be compiled (SMS 2003) on clients machines by deploying a package that runs a mofcomp.exe. This topic, however, is not covered in this article.
5. Apply the Windows OS patches if applicable. See ?Additional Information? section below.
On the next inventory cycle, the new custom processor data should be available in SCCM database. To verify the returned data of the custom class, execute the following script:
SELECT ResourceID, NumberOfCores0
FROM dbo.v_GS_FNMP_Processor0
Additional Information
There are known issues in Windows 2003 server and Windows XP whereby the
NumberOfCores and
NumberOfLogicalProcessors data are not accurately reported. The following KB links provide the solutions:
- Windows Server 2003: KB 932370
-
The same principle may be applied on SCCM 2003
This KB article applies to FNMP 8.6 and earlier vesions.