September 2008 - Posts

Scriptlogic MSI Studio - Quick Review

I've been meaning to install MSIStudio from Scriptlogic for a while to check it out, and I finally had time.  I created (and edited, post-creation) a basic response transform, and repackaged a really old install (it was so old, folder names had to be 8 char!).  For both, I was quite satisfied with how it functioned, and the plethora of customizations, especially post-creation; just editing the .msi or .mst. via right-click, edit.

Having used both Wise & AdminStudio in the past, the methods were very familiar to me.  With that background, it's likely I wasn't a good person to test how a new ConfigMgr admin might understand how to use the app.  But if you've used other Transform Editors, it's a very familiar layout.

If you work for a company which has a large department that needs to keep track of project status during package creation, one of the other vendors' offerings may be a better fit.  But if you are a small to mid-size company with few people that would create a transform or repackage something, this would definitely fit the bill.  I was able to quickly find everything I'd ever had to find when customizing an install: regkeys, files, permissions, custom actions, properties, what the entry in ARP looks like.  I could create my own vbscript custom action, I could add my own Components and Features, and I could add to the upgrade list of GUIDs.  I could mess with the order of InstallExecuteSequence, or delete items within the sequence.  I know that's not a definitive list--but that's pretty much everything I've ever had to do when customizing an install as an admin.

I couldn't figure out how to import a .reg for stamping the .mst; but manually creating the Component, and Feature, then manually creating the regkeys in the registry, copying them over, editing them to be [ ] variables, then in the registry table moving the regkeys from their component to my component, building & saving worked.  So it's possible to stamp your mst; but it was slightly painful!  Although more likely... I just didn't know how to do an import regkey action within my custom component.

As an extra bonus, I checked the prices of the 'standard' full license for the other 2 vs. MSI Studio Standard.  MSI Studio was easily 1/3rd to 1/4th the price of those others.

It should be noted I didn't test all of the options available--just the 2 that I've used most of the time.  Creating a transform is the main one.  Repackaging something is generally the absolute last choice to an admin--the vendor usually has an MSI.  Even if that MSI is buried inside of a setup.exe.  That just means you have to look harder to find it!

Posted by skissinger | with no comments
Filed under:

win32_servercomponent - what is it?

I'd like to know, too!  Actually Rob Olson (the Dude from www.dudeworks.com) believes it was an earlier beta WMI class for Windows Server 2008.  When it went RTM it was likely renamed win32_serverfeature.

So, what's the big deal?  Not much.  It's just that it's a class that is on by default (set to TRUE) in your sms_def.mof for Configuration Manager.  I'm fairly certain everyone can change that in their SMS_DEF.MOF from TRUE to FALSE.  You could probably even delete the whole section without any guilt whatsoever.

Now that you've cleaned up... if you want reported what it likely was supposed to report...  add this edit to the bottom of your SMS_DEF.MOF:

[ SMS_Report     (TRUE),
  SMS_Group_Name ("Server Feature"),
  SMS_Class_ID   ("CUSTOM|SERVER_FEATURE|1.0") ]

class Win32_ServerFeature : SMS_Class_Template
{
 [SMS_Report (TRUE), key ] uint32 ID;
 [SMS_Report (TRUE)      ] uint32 ParentID;
 [SMS_Report (TRUE)      ] string Name;
};

This edit is for Windows Server 2008, Server Features.  For example, this is the data you would get back.  You can see this box has WSUS, and IIS installed.  And you can also see which features are dependent on other installed features by looking at ParentID.

What might this be useful for?  Well, not much yet that I can see in the near future.  But one day you'll have gotten rid of all of your older Server OS'.  At that point, wouldn't it be great to find "all servers with IIS + xyz features" using this instead of Add/Remove Programs or something else?  If you don't think you need this quite yet (Server 08 is a year+ away) add it as FALSE until someone asks for "what Server Features are installed on our Windows Server 2008 boxes".  Then all you'd have to do is change it to TRUE.

Posted by skissinger | with no comments
Filed under: ,

Dell OMCI SMBiosSettings - Hardware Inventory Extension

By request, the WakeOnLan settings out of the WMI Namespace created by Dell's Open Manage Client Instrumentation; the Dell_SMBIOSSettings, specifically the WakeOnLan attributes.  Below is the mof edit; to be added to the bottom of sms_def.mof on your primary site servers, inboxes\clifiles.src\hinv.  Note most of the attributes are FALSE.  If you determine you would like those additional attributes, at any time you can change them from FALSE to TRUE.  Also below is a sample report for the WakeonLan returned results.  The results come back as an integer; so interpretation is needed at the report.  If you do want to turn on additional attibutes, in the attached is a text file.  If you follow the pattern of the WakeOnLan info, you'll see the other attributes' patterns, and be able to create your own Select Case... reports.

// Dell SMBIOS Settings
// These settings are available when the following optional application for
// managed Dell systems is installed.
// Dell Open Manage Client Instrumentation (OMCI)
// This edit was tested using v7.6 of Dell OMCI
// Note: the majority of options, changed from FALSE to TRUE, report an
// integer (0, 1, 2, 3, etc.)  Those integers would need to be correctly
// interpreted at the report level.

[ SMS_Report     (TRUE),
  SMS_Group_Name ("Dell SMBIOS Settings"),
  SMS_Class_ID   ("CUSTOM|Dell_SMBiosSettings|1.0"),
  SMS_Namespace (FALSE),
  Namespace      ("\\\\\\\\.\\\\root\\\\dellomci") ]

class Dell_SMBIOSSettings : SMS_Class_Template
{
  [SMS_Report (FALSE)    ]     sint32 AGPSlot;
  [SMS_Report (FALSE)    ]     sint32 AmbientLightSensor;
  [SMS_Report (FALSE)    ]     sint32 AFSMode;
  [SMS_Report (FALSE)    ]     sint32 AutoOn;
  [SMS_Report (FALSE)    ]     sint32 AutoOnHour;
  [SMS_Report (FALSE)    ]     sint32 AutoOnMinute;
  [SMS_Report (FALSE)    ]     sint32 BluetoothDevices;
  [SMS_Report (FALSE)    ]     sint32 BootSequence;
  [SMS_Report (FALSE)    ]     sint32 BuiltinFloppy;
  [SMS_Report (FALSE)    ]     sint32 BuiltinNIC;
  [SMS_Report (FALSE)    ]     sint32 BuiltinNIC2;
  [SMS_Report (FALSE)    ]     sint32 BuiltinPointingDevice;
  [SMS_Report (FALSE)    ]     string Caption;
  [SMS_Report (FALSE)    ]     sint32 CellularRadio;
  [SMS_Report (FALSE)    ]     sint32 Charger;
  [SMS_Report (FALSE)    ]     sint32 ChassisIntrusion;
  [SMS_Report (FALSE)    ]     sint32 ChassisIntrusionStatus;
  [SMS_Report (FALSE)    ]     sint32 ClearSystemEventLog;
  [SMS_Report (FALSE)    ]     sint32 CoolAndQuiet;
  [SMS_Report (FALSE)    ]     sint32 CPUVirtualization;
  [SMS_Report (FALSE), key]     sint32 DellInstanceID;
  [SMS_Report (FALSE)    ]     string Description;
  [SMS_Report (FALSE)    ]     sint32 ESataPorts;
  [SMS_Report (FALSE)    ]     sint32 ExpressCharge;
  [SMS_Report (FALSE)    ]     sint32 ExternalHotkey;
  [SMS_Report (FALSE)    ]     sint32 FastBoot;
  [SMS_Report (FALSE)    ]     sint32 HardDiskAcousticMode;
  [SMS_Report (FALSE)    ]     sint32 HardDiskFailover;
  [SMS_Report (FALSE)    ]     sint32 HotDocking;
  [SMS_Report (FALSE)    ]     sint32 Hyperthreading;
  [SMS_Report (FALSE)    ]     sint32 IDEController;
  [SMS_Report (FALSE)    ]     sint32 IntegratedAudio;
  [SMS_Report (FALSE)    ]     sint32 IntegratedRAIDController;
  [SMS_Report (FALSE)    ]     sint32 IntegratedSASController;
  [SMS_Report (FALSE)    ]     sint32 IntegratedSATAController;
  [SMS_Report (FALSE)    ]     sint32 IntegratedUSBHub;
  [SMS_Report (FALSE)    ]     sint32 InternalMiniPCI;
  [SMS_Report (FALSE)    ]     sint32 KeyboardIllumination;
  [SMS_Report (FALSE)    ]     sint32 Keypad;
  [SMS_Report (FALSE)    ]     sint32 LimitCPUIDValue;
  [SMS_Report (FALSE)    ]     sint32 LowPowerS5;
  [SMS_Report (FALSE)    ]     sint32 MediaCardAnd1394;
  [SMS_Report (FALSE)    ]     sint32 Microphone;
  [SMS_Report (FALSE)    ]     sint32 ModuleBayDevice;
  [SMS_Report (FALSE)    ]     sint32 MonitorToggling;
  [SMS_Report (FALSE)    ]     sint32 MultiCore;
  [SMS_Report (FALSE)    ]     sint32 NMIButton;
  [SMS_Report (FALSE)    ]     sint32 NodeInterleave;
  [SMS_Report (FALSE)    ]     sint32 NoExecute;
  [SMS_Report (FALSE)    ]     sint32 NumLock;
  [SMS_Report (FALSE)    ]     sint32 Onboard1394;
  [SMS_Report (FALSE)    ]     sint32 OnboardModem;
  [SMS_Report (FALSE)    ]     sint32 OSInstallMode;
  [SMS_Report (FALSE)    ]     sint32 ParallelPortConfiguration;
  [SMS_Report (FALSE)    ]     sint32 ParallelPortMode;
  [SMS_Report (FALSE)    ]     sint32 PasswordBypass;
  [SMS_Report (FALSE)    ]     sint32 PCCard;
  [SMS_Report (FALSE)    ]     sint32 PCCardAnd1394;
  [SMS_Report (FALSE)    ]     sint32 PCISlots;
  [SMS_Report (FALSE)    ]     sint32 PenMissingIndication;
  [SMS_Report (FALSE)    ]     sint32 PenResumeOn;
  [SMS_Report (FALSE)    ]     sint32 PointingDevice;
  [SMS_Report (FALSE)    ]     sint32 POSTF12KeySetting;
  [SMS_Report (FALSE)    ]     sint32 POSTF2KeySetting;
  [SMS_Report (FALSE)    ]     sint32 POSTHelpDeskKeySetting;
  [SMS_Report (FALSE)    ]     sint32 POSTMEBxKeySetting;
  [SMS_Report (FALSE)    ]     sint32 PowerManagementSettings;
  [SMS_Report (FALSE)    ]     sint32 PrimaryParallelATAMaster;
  [SMS_Report (FALSE)    ]     sint32 PrimaryParallelATASlave;
  [SMS_Report (FALSE)    ]     sint32 PrimaryVideo;
  [SMS_Report (FALSE)    ]     sint32 RadioTransmission;
  [SMS_Report (FALSE)    ]     sint32 SafeUSB;
  [SMS_Report (FALSE)    ]     sint32 SATADIPM;
  [SMS_Report (FALSE)    ]     sint32 SecondaryParallelATAMaster;
  [SMS_Report (FALSE)    ]     sint32 SecondaryParallelATASlave;
  [SMS_Report (FALSE)    ]     sint32 SerialATAChannel1;
  [SMS_Report (FALSE)    ]     sint32 SerialATAChannel2;
  [SMS_Report (FALSE)    ]     sint32 SerialATAChannel3;
  [SMS_Report (FALSE)    ]     sint32 SerialATAChannel4;
  [SMS_Report (FALSE)    ]     sint32 SerialATAChannel5;
  [SMS_Report (FALSE)    ]     sint32 SerialATAChannel6;
  [SMS_Report (FALSE)    ]     sint32 SerialATAChannel7;
  [SMS_Report (FALSE)    ]     sint32 SerialATAChannel8;
  [SMS_Report (FALSE)    ]     sint32 SerialCommunication;
  [SMS_Report (FALSE)    ]     sint32 SerialPort1Configuration;
  [SMS_Report (FALSE)    ]     sint32 SerialPort2Configuration;
  [SMS_Report (FALSE)    ]     sint32 SERRDMIMessage;
  [SMS_Report (FALSE)    ]     sint32 SetCMOSToDefault;
  [SMS_Report (FALSE)    ]     string SettingID;
  [SMS_Report (FALSE)    ]     sint32 SingleByteECCLogging;
  [SMS_Report (FALSE)    ]     sint32 SingleCoreTurboMode;
  [SMS_Report (FALSE)    ]     sint32 SmartCardReader;
  [SMS_Report (FALSE)    ]     sint32 SMARTErrors;
  [SMS_Report (FALSE)    ]     sint32 SpeakerVolume;
  [SMS_Report (FALSE)    ]     sint32 SpeedStep;
  [SMS_Report (FALSE)    ]     sint32 TabletButtons;
  [SMS_Report (FALSE)    ]     sint32 TertiaryParallelATAMaster;
  [SMS_Report (FALSE)    ]     sint32 TertiaryParallelATASlave;
  [SMS_Report (FALSE)    ]     sint32 TrustedPlatformModule;
  [SMS_Report (FALSE)    ]     sint32 TrustedPlatformModuleActivation;
  [SMS_Report (FALSE)    ]     sint32 UARTPowerDown;
  [SMS_Report (FALSE)    ]     sint32 USBEmulation;
  [SMS_Report (FALSE)    ]     sint32 USBFlashDriveEmulation;
  [SMS_Report (FALSE)    ]     sint32 USBFrontPanelPorts;
  [SMS_Report (FALSE)    ]     sint32 USBPort00;
  [SMS_Report (FALSE)    ]     sint32 USBPort01;
  [SMS_Report (FALSE)    ]     sint32 USBPort02;
  [SMS_Report (FALSE)    ]     sint32 USBPort03;
  [SMS_Report (FALSE)    ]     sint32 USBPort04;
  [SMS_Report (FALSE)    ]     sint32 USBPort05;
  [SMS_Report (FALSE)    ]     sint32 USBPort06;
  [SMS_Report (FALSE)    ]     sint32 USBPort07;
  [SMS_Report (FALSE)    ]     sint32 USBPort08;
  [SMS_Report (FALSE)    ]     sint32 USBPort09;
  [SMS_Report (FALSE)    ]     sint32 USBPort10;
  [SMS_Report (FALSE)    ]     sint32 USBPort11;
  [SMS_Report (FALSE)    ]     sint32 USBPort12;
  [SMS_Report (FALSE)    ]     sint32 USBPort13;
  [SMS_Report (FALSE)    ]     sint32 USBPort14;
  [SMS_Report (FALSE)    ]     sint32 USBPort15;
  [SMS_Report (FALSE)    ]     sint32 USBPorts;
  [SMS_Report (FALSE)    ]     sint32 USBPortsExternal;
  [SMS_Report (FALSE)    ]     sint32 USBPortsUserAccessible;
  [SMS_Report (FALSE)    ]     sint32 USBRearDual;
  [SMS_Report (FALSE)    ]     sint32 USBRearQuad;
  [SMS_Report (FALSE)    ]     sint32 USBWake;
  [SMS_Report (FALSE)    ]     sint32 VideoExpansion;
  [SMS_Report (FALSE)    ]     sint32 VideoMemorySize;
  [SMS_Report (FALSE)    ]     sint32 VTforDirectIO;
  [SMS_Report (TRUE)     ]     sint32 WakeupOnLAN;
  [SMS_Report (TRUE)     ]     sint32 WakeupOnLANMethod;
  [SMS_Report (FALSE)    ]     sint32 WiFiCatcherChanges;
  [SMS_Report (FALSE)    ]     sint32 WiFiLocator;
  [SMS_Report (FALSE)    ]     sint32 WirelessDevice;
  [SMS_Report (FALSE)    ]     sint32 WirelessLAN;
  [SMS_Report (FALSE)    ]     sint32 WirelessSwitchBluetoothControl;
  [SMS_Report (FALSE)    ]     sint32 WirelessSwitchCellularControl;
  [SMS_Report (FALSE)    ]     sint32 WirelessSwitchChanges;
  [SMS_Report (FALSE)    ]     sint32 WirelessSwitchWirelessLANControl;
};

 And.. the Sample Report:

select Case when DellSM.WakeupOnLanMethod0 = 1 then 'Other'
when DellSM.WakeupOnLanMethod0 = 2 then 'Unsupported'
when DellSM.WakeupOnLanMethod0 = 3 then 'Magic Packet'
end as 'WakeupOnLanMethod',
Case when DellSM.WakeupOnLAN0 = 1 then 'Other'
when DellSM.WakeupOnLAN0 = 2 then 'Unsupported'
when DellSM.WakeupOnLAN0 = 3 then 'Disabled'
when DellSM.WakeupOnLAN0 = 4 then 'Enabled for add-in NIC'
when DellSM.WakeupOnLAN0 = 5 then 'Enabled for on-board NIC'
when DellSM.WakeupOnLAN0 = 6 then 'Enabled for all NICs'
when DellSM.WakeupOnLAN0 = 7 then 'Enabled with boot to NIC'
when DellSM.WakeupOnLAN0 = 8 then 'LAN or WLAN'
when DellSM.WakeupOnLAN0 = 9 then 'WLAN only'
 END as 'WakeuponLAN'
from v_R_System as SYS
inner join v_gs_dell_smbios_settings0 as DellSM on
sys.resourceid=Dellsm.Resourceid
where SYS.Netbios_Name0 = @compname

With a CompName prompt SQL statement of

begin
 if (@__filterwildcard = '')
  SELECT DISTINCT SYS.Netbios_Name0 from v_R_System SYS ORDER By SYS.Netbios_Name0
 else
  SELECT DISTINCT SYS.Netbios_Name0 from v_R_System SYS
  WHERE SYS.Netbios_Name0 like @__filterwildcard
  ORDER By SYS.Netbios_Name0
end

 

Posted by skissinger | with no comments
Filed under: ,

Hardware Inventory Extensions Presentation

At the Minnesota System Center User Group last night, I presented on how to extend hardware inventory.  Attached is the Powerpoint slides from that presentation.

Posted by skissinger | with no comments
Filed under: ,

ConfigMgr Hardware Inventory Snippets Updated - v1.3

MOF snippets have been updated, available from http://www.sccmexpert.com/MOF/Scripts.aspx

What's new since 1.0?

9-10-2008 v1.3 - Added to 16-McAfeeEPO (thanks Rick!)
9-1-2008 v1.2 - Added to 19-PhysicalMemory (thanks Greg!)
8-26-2008 v1.1 - Added 37-HardDriveSerialNumber (...)

Posted by skissinger | with no comments
Filed under: ,

Desired Configuration Management - Clients fail to successfully download Configuration Items

I came across a mis-configuration issue with Management Points using a replica database.  My own fault of course, but took a long time for me to spot where I messed up.  So just in case someone else hits the same issue...

Issue:  Server 2008, x64.  Configuration Manager 07 Sp1.  Management Points behind an NLB.  Clients could not successfully download Configuration Items for a Configuration Baseline.  (The NLB aspect is not as relevant as the MPs using a replica database)

Symptoms

Symptom #1:  During enabling CLR Integration (via SQL 2005 Surface Area Configuration for Features, CLR Integration), the following error would occur:

"could not load file or assembly 'Microsoft.sqlserver.batchparser, version-9.0.242.0, culture-neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies.  The system cannot find the file specified. (MIcrosoft.SqlServer.ConnectionInfo)"

Symptom #2: when interactively requesting a client “Evaluate” a Specific baseline listed on the Configuration Management applet, the DCMAgent.log would indicate:

“AddCIAssignmentFromWmiPolicy - Adding baseline with ID:ScopeId_<yourScopeID>/Baseline_<yourBaselineID> Version:<yourversion>.00 to scheduled job”

“State – Downloading”

Then… nothing for 6 hours.  After 6 hours a State – Failed would be recorded in DCMAgent.log

Resolution: On the Management Point Servers hosting the SQL Database Replicas for the NLB-defined Management Point, CLR Integration needs to be enabled (without errors).  On an SQL 2005 x64, "Microsoft SQL Server 2005 Management Objects Collection" from the SQL 2005 Feature Pack (http://www.microsoft.com/downloads/details.aspx?FamilyId=D09C1D60-A13C-4479-9B91-9E8B9D835CDC&displaylang=en), specifically the x64 version, aka SQLServer2005_XMO_x64.msi, needs to be installed.  Then run the Surface Area Configuration for Features, and enable CLR Integration.

Ron Crumbaker's Web Remote Console 3.21 - Installation instructions on Server 2008 with ConfigMgr 07

WIth Hector Cortez, we created a doc that hopefully assists you with getting Ron's Console installed & working on Server 2008 with ConfigMgr 07.

Hardware Inventory - EPO Plugins

Rick Jones shared this mof snippet, see attached picture for a sample of the results returned.


     //SMS_DEF.MOF
            /////////////////////////////////////
           //                                 //
          //  Mcafee ePO Plugins Enumeration //
         //                                 //
        /////////////////////////////////////
 // contributed by Rick Jones//
        #pragma namespace ("\\\\.\\root\\cimv2\\sms")
        #pragma deleteclass("Win32Reg_Mcafee_ePO_Plugins", NOFAIL)
       
        [ SMS_Report     (TRUE),
          SMS_Group_Name ("Mcafee ePO Plugins"),
          SMS_Class_ID   ("McAfee|ePO_Plugins|1.0") ]
       
        class Win32Reg_Mcafee_ePO_Plugins : SMS_Class_Template
        {
            [SMS_Report (TRUE), key ]   string     SoftwareID;
            [SMS_Report (TRUE)      ]   string     Version;
            [SMS_Report (TRUE)      ]   string  ProductName;
            [SMS_Report (FALSE)     ]   string     PluginPath;
            [SMS_Report (FALSE)     ]   string     UninstallCommand;
            [SMS_Report (FALSE)     ]   string     InstallPath;
            [SMS_Report (FALSE)     ]   string     InstalledPath;
            [SMS_Report (TRUE)      ]   string     HotFixVersions;
            [SMS_Report (TRUE)      ]   string     HotFixInstallDate;
            [SMS_Report (TRUE)      ]   string     DatInstallDate;
            [SMS_Report (TRUE)      ]   string     DatVersion;
        };
       
        //Configuration.MOF
            /////////////////////////////////////
           //                                 //
          //  Mcafee ePO Plugins Enumeration //
         //                                 //
        /////////////////////////////////////
 //contributed by Rick Jones //
        #pragma namespace ("\\\\.\\root\\cimv2")
        #pragma deleteclass("Win32Reg_Mcafee_ePO_Plugins", NOFAIL)
       
        [ dynamic,
          provider("RegProv"),
          ClassContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Network Associates\\ePolicy Orchestrator\\Application Plugins")
        ]
        class Win32Reg_Mcafee_ePO_Plugins
        {
            [PropertyContext("Software ID"), key]      string  SoftwareID;
             [PropertyContext("Version")]               string  Version;
             [PropertyContext("Product Name")]          string  ProductName;
             [PropertyContext("Plugin Path")]           string     PluginPath;
             [PropertyContext("Uninstall Command")]          string  UninstallCommand;
             [PropertyContext("Install Path")]          string  InstallPath;
             [PropertyContext("Installed Path")]        string  InstalledPath;
             [PropertyContext("HotFixVersions")]        string  HotFixVersions;
             [PropertyContext("HotFixInstallDate")]         string  HotFixInstallDate;
             [PropertyContext("DatInstallDate")]        string  DatInstallDate;
             [PropertyContext("DatVersion")  ]          string  DatVersion;  
        };

Posted by skissinger | with no comments

Desired Configuration Management - Trigger Evaluation Remotely

Either I haven't seen it posted elsewhere, or can't find it in the SDK, but I had a need to trigger DCM evaluations on clients.  Here's the code I ended up with.  It could I'm sure be cleaner, or there's already a documented way to do this, but it's working for me so I thought I'd share it.  It could be easily made into a right-click extension, or added as a button to Ron's Console.  Let me know if anyone needs this as a button on Ron's Web Console 3.21; I could throw it together.

 On Error Resume Next
CompName = Wscript.Arguments(0)
If compname = "" Then
  CompName = InputBox("Input a Computer name or IP", "Computer Name",CompName)
End If
err.clear
set DCMInvoke = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_
 CompName & "\root\ccm\dcm:SMS_DesiredConfiguration")
 if err.number <> 0 then
 msgbox "unable to access " & CompName & vbcr &_
   "Error: " & err.description,,"SMS DCM Trigger Evaluation"
 else
  Set objSWbemServices = GetObject("winmgmts:\\" & CompName & "\root\ccm\dcm")
  Set colSWbemObjectSet = objSWbemServices.ExecQuery("SELECT * FROM SMS_DesiredConfiguration")
  For Each objSWbemObject In colSWbemObjectSet
   DCMInvoke.TriggerEvaluation objSWbemObject.Name,objSWbemObject.Version
  Next
 end if

 

Physical Memory and Memory Slots Hardware Inventory extension

Building on Jeff Gilbert's Physical Memory mof edit, Greg Heuing has an additional edit to be able to pull in the # of memory slots on the motherboard.  If you happen to need to know if there are any free memory slots available, this could be a resource.

The edits are below, which you would add to sms_def.mof for both ConfigMgr & SMS2003.  If you are using sms2003, remember to add the Pragma namespace line:
#pragma namespace ("\\\\.\\root\\CIMv2\\sms")
which you do not need in ConfigMgr


[SMS_Report (TRUE),
SMS_Group_Name ("Physical Memory"),
SMS_Class_ID   ("Microsoft|Physical_Memory|1.0")]
 
class Win32_PhysicalMemory : SMS_Class_Template
{   
                [SMS_Report (TRUE)] string BankLabel;   
                [SMS_Report (TRUE), SMS_Units("Megabytes")]  uint64 Capacity;   
                [SMS_Report (TRUE)] string Caption;   
                [SMS_Report (TRUE)] string DeviceLocator[];   
                [SMS_Report (TRUE)] uint16 FormFactor;   
                [SMS_Report (TRUE)] string Manufacturer;   
                [SMS_Report (TRUE)] uint16 MemoryType;   
                [SMS_Report (TRUE)] uint32 PositionInRow;   
                [SMS_Report (TRUE)] uint32 Speed;   
                [SMS_Report (TRUE),Key] string    Tag;   
                [SMS_Report (TRUE),Key] string    CreationClassName;
};
 

// MemoryDevices give you the # of slots

[SMS_Report (TRUE),
SMS_Group_Name ("Physical Memory Array"),
SMS_Class_ID   ("Microsoft|Physical_Memory_Array|1.0")]
 
class Win32_PhysicalMemoryArray : SMS_Class_Template
{   
                [SMS_Report (FALSE)] string Caption;
                [SMS_Report (FALSE)] string CreationClassName;
                [SMS_Report (FALSE)] string Description;
                [SMS_Report (FALSE)] uint16 Location;
                [SMS_Report (FALSE)] string Manufacturer;
                [SMS_Report (TRUE), SMS_Units("Megabytes")] uint32 MaxCapacity;
                [SMS_Report (TRUE)] uint16 MemoryDevices;
                [SMS_Report (FALSE)] uint16 MemoryErrorCorrection;
                [SMS_Report (FALSE)] string Model;
                [SMS_Report (FALSE)] string Name;
                [SMS_Report (FALSE)] string OtherIdentifyingInfo;
                [SMS_Report (FALSE)] string PartNumber;
                [SMS_Report (FALSE)] boolean PoweredOn;
                [SMS_Report (FALSE)] boolean Removable;
                [SMS_Report (FALSE)] boolean Replaceable;
                [SMS_Report (FALSE)] string SerialNumber;
                [SMS_Report (FALSE)] string SKU;
                [SMS_Report (FALSE)] string Status;
                [SMS_Report (TRUE), Key] string Tag;
                [SMS_Report (FALSE)] uint16 Use;
                [SMS_Report (FALSE)] string Version;
};

The edits above would get you a report sample like...


select sys.netbios_name0, mem.banklabel0 [Bank Label], mem.capacity0 [Capacity in MB], mem.FormFactor0 [Form Factor],
 MEM.memorytype0 [Memory Type], mem.tag0 [TAG] from v_gs_physical_memory as MEM
inner join v_r_system as SYS on SYS.resourceid=MEM.resourceid
 where
sys.netbios_name0 = @compname
order by MEM.tag0

select MEMA.MemoryDevices0 [Total Number of Memory Slots] from v_gs_physical_memory_array as MEMA
inner join v_r_system as SYS on SYS.resourceid=MEMA.resourceid
 where
sys.netbios_name0 = @compname

select mema.memoryDevices0 - Count(mem.tag0) [Number of Free Slots available] from v_gs_physical_memory as MEM
inner join v_r_system as SYS on SYS.resourceid=MEM.resourceid
inner join v_gs_physical_memory_array as MEMA on sys.resourceid=mema.resourceid
 where
sys.netbios_name0 = @compname
group by mema.memorydevices0


With a prompt for compname, provide and sql statement of:
begin
 if (@__filterwildcard = '')
  SELECT DISTINCT SYS.Netbios_Name0 from v_R_System SYS ORDER By SYS.Netbios_Name0
 else
  SELECT DISTINCT SYS.Netbios_Name0 from v_R_System SYS
  WHERE SYS.Netbios_Name0 like @__filterwildcard
  ORDER By SYS.Netbios_Name0
end


Which would look like this:

PhysicalMemorySampleReport