GuidesMonitoring SMS 2.0 SP2 Upgrades

Monitoring SMS 2.0 SP2 Upgrades

ServerWatch content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

by Dana Daugherty

Here are 3 methods you can use to monitor
the status your client upgrades. 
Using queries and Windows Script Host, Dana Daugherty gives you 3 ways to track the SMS 2.0 SP2 Upgrade.

*Note: This information came from Cliff Hobb’s SMS
FAQ and the SMS 2.0 Services Packs Deployment White Paper.

Create a collection or query based on this WQL code: 

Name, ClientVersion from SMS_R_System where ClientVersion >=
“2.00.1493” order by Name

Client Component Version

SMS 2.0 SP1 and SMS 2.0 SP2 each has a support
file called the Client Component MOF that you can use to enhance
client upgrade monitoring. Support files are available, by default,
in your Program FilesSMS 2.0 Supportability Files directory after
you run the Support.exe program found in the Support directory of
your service pack source.

The Client Component MOF file enables SMS
hardware inventory to report data on each client component. For each
component, the current and pending version is reported along with
the current state, such as Not Available, Installed,
or Reboot Required. Note that this is the same information
that is reported on the client in the Systems
Management Properties
dialog box, (click the Systems
Management icon in Control Panel). SMS gathers this data during
hardware inventory and it can be displayed in the Resource Explorer
under the SMS Client State group class.

You must add the Client Component MOF File
(SMSClient.mof) to the SMS_def.mof file located on the SMS site
server in the SMSInboxesClifiles.srcHinv directory. To do this,
copy the contents of the SMSClient.mof file and append the contents
to the end of the SMS_def.mof file. You can also perform this task
by typing a command, such as the following, at a command line:


copy /a SMS_def.mof + SMSClient.mof


After appending SMSClient.mof to SMS_def.mof, use
the MOF Compiler tool (MofComp.exe) to verify that the resulting MOF
file compiles. The MOF Compiler tool is installed automatically with
SMS 2.0. The MOF Compiler tool is also part of the WMI SDK, so for
more information about compiling MOF files, see the WMI SDK
documentation. After compiling the new MOF file, rename the original
SMS_def.mof to SMS_def.old and rename new MOF file (SMS_Def_New.mof)
to SMS_def.mof. SMS will automatically replicate the changes to all

The class that the client component version data
is available from is SMS_G_System_SMS_CLIENT in the
rootSMSsite_sitecode> namespace.
The useful properties are:

ResourceID – a numeric value that can be used to
relate the instances to instances for the same resource in other SMS

Component – “Remote Control”, for example

Version – 2.00.1417.2000 (for a particular beta
version of SMS 2.0 SP2. Your version will vary.)

State – “Installed”

You should successfully apply the service pack to
a test computer and determine the actual version number from the
Systems Management icon in Control Panel.

Note that the registry entries collected by this
technique could be checked directly using Regedit.exe or a similar

Service Pack Deployment

As discussed in the section “Preparing to Monitor
the Deployment”, reports indicating the percentage of computers that
are successfully upgraded at each site would be very useful for
monitoring the service pack deployment. Producing such reports is
not easy using many traditional SMS reporting tools, for several

WMI Query Language (WQL) does not have a Count()

Two queries are required to calculate percentages ?
one to give a count of all clients (or components, etc.) at each
site and another to give a count of all clients (etc.) that have
been upgraded at the sites.

Some SMS classes require parameters to be specified
before they return results. SMS_ComponentSummarizer is an example of
this kind of class.

Some reporting tools are very powerful and can be
used despite these limitations. However, a simple alternative is to
use Windows Script Host (WSH) scripts. WSH scripts are very flexible
and powerful, but they are also easy to work with.

The following WSH script can be used to produce a
report of service pack deployment success for your sites and their

provides script, macro and other code examples for illustration
only, without warranty either expressed or implied, including but
not limited to the implied warranties of merchantability and/or
fitness for a particular purpose. These samples are provided ‘as is’
and Microsoft does not guarantee that the following script, macro or
code can be used in all situations. Microsoft does not support
modifications of the script, macro or code to suit customer
requirements for a particular purpose. While Microsoft support
engineers can help explain the functionality of a particular script
function, macro or code example, they will not modify these examples
to provide added functionality, nor will they help you construct
scripts, macros or code to meet your specific needs. If you have
limited programming experience, you may want to consult one of the
Microsoft Solution Providers. Solution Providers offer a wide range
of fee-based services, including creating custom scripts. For more
information about Microsoft Solution Providers, call Microsoft
Customer Information Service at (800) 426-9400.

Expected_Version=”1493″ ‘replace with the build number
of the service pack

Dim loc

Set loc = CreateObject(“WbemScripting.SWbemLocator”)

Dim WbemServices

Set WbemServices = loc.ConnectServer( , “rootSMSsite_CEN”)
‘change site code


Dim Site

Dim Sites

Dim Machines


Set Sites = WbemServices.ExecQuery(“Select * From

For Each Site In Sites



Machines = WbemServices.ExecQuery(“Select * From SMS_R_System WHERE
SMS_R_System.SMSAssignedSites[1]='” + Site.SiteCode + “‘”)

Error Resume Next ‘we don’t mind if none are upgraded


Error Goto 0



Machines = WbemServices.ExecQuery(“Select * From SMS_R_System WHERE
SMS_R_System.SMSAssignedSites[1]='” + Site.SiteCode + “‘ AND
SMS_R_System.ClientVersion LIKE ‘%”+Expected_Version+”%'”)

Error Resume Next ‘we don’t mind if none are upgraded


Error Goto 0


SiteInfo = Site.SiteCode +” (“+ Site.SiteName +”)”

Instr(1, Site.Version, Expected_Version)0 Then

         SiteInfo = SiteInfo + ” –
Site Upgraded”

Wscript.Echo SiteInfo + Space(50-LEN(SiteInfo)),
INT(NumUpgraded/Potential*100), “% of its”, Potential, “clients are


Wscript.Echo SiteInfo + ” – Site Not Upgraded”




The output of this script will look like:

CEN (New York) – Site Not Upgraded

NOT (Nottingham) – Site Upgraded                 
12 % of its 8 clients are upgraded

PRI (Prioria) – Site Not Upgraded


This script must be changed to use the site code
for your central site (instead of “CEN”), and you must change the
first line to reflect the build number of the service pack you are
applying. You can determine the build number by checking the version
of any clients or servers that you have upgraded in your test
environment. As written, the script must be run on the central site
server, but you can specify the server, a username, and password to
the ConnectServer method if you want to run this script remotely.
You should refer to the SMS SDK for details on such issues.

If you want to verify that the SMS site
components have been successfully upgraded at all sites, you can use
the following script:


Dim loc

Set loc = CreateObject(“WbemScripting.SWbemLocator”)

Dim WbemServices

Set WbemServices = loc.ConnectServer( ,


Dim Site

Dim Sites

Dim Component

Dim Components


Set Sites = WbemServices.ExecQuery(“Select * From

For Each Site In Sites


Components = WbemServices.ExecQuery(“Select * From
SMS_ComponentSummarizer WHERE SiteCode='” + Site.SiteCode + “‘ AND
TallyInterval=’000A470000284400’ AND Status1”)

Error Resume Next ‘we don’t mind if there are no messages

Each Component In Components

If Err.Number=0 Then

Wscript.Echo Component.SiteCode + “: ” +


End If


Error Goto 0




If NumComponents=0 Then Wscript.Echo “All components were
upgraded successfully.”


If any components are in an “Installing” or other
unusual state, they are listed with the site code. You can then go
to the site and investigate further.

Again, the site code (“CEN”), must be changed to
match your site, and the script must be run on the site server
itself. The TallyInterval limits the Component Summarizer to check
since the first of the current month. Alternate tally intervals can
be specified using values listed in the SMS SDK, under the “Using
Summarizers” topic.

The following sample script will report the
version of SMS at all sites, in the order of your hierarchy. It does
not include details about the client deployment.


Sub Level( parent, depth, extended_Description )

Dim Site

Dim Sites


Set Sites = WbemServices.ExecQuery(“Select * From SMS_Site
Where ReportingSiteCode='”+parent+”‘”)

For Each Site In Sites



If Site.BuildNumber  Then zBuild=”SMS 1.0″

If Site.BuildNumber=692 
Then zBuild=”SMS 1.1″

If Site.BuildNumber=786 
Then zBuild=”SMS 1.2″

If Site.BuildNumber=1239 Then zBuild=”SMS 2.0 (no SP)”

If Site.BuildNumber>1239 AND Site.BuildNumber

If Site.BuildNumber=1380 Then zBuild=”SMS 2.0 SP1″

If Site.BuildNumber>1380 AND Site.BuildNumber

If Site.BuildNumber=1493 Then zBuild=”SMS 2.0 SP2″

If Site.BuildNumber>1493 Then zBuild=”SMS 2.0 post-SP2 (”
& Site.BuildNumber & “)”


Descr=Site.SiteName + ” (“+Site.SiteCode+”) “

Descr=SPACE( depth*3 ) + Descr

Descr=Left( Descr, 35)

Descr=Descr + SPACE(36-LEN(Descr))


Wscript.Echo Descr & zBuild

extended_Description=extended_Description + Chr(13) + Descr
& zBuild


Level Site.SiteCode, depth+1, extended_Description




End Sub


Dim loc

Set loc = CreateObject(“WbemScripting.SWbemLocator”)

Dim WbemServices

Set WbemServices = loc.ConnectServer( ,


‘start with the cental site

Dim xDescr


Level “”, 0, xDescr


‘pause so the command line output can be seen, or to cut and
paste it to a text file

MsgBox “”,, “SMS Site Versions”

‘or, in case you prefer a window output  (but’s it’s a proportionate

‘MsgBox xDescr,, “SMS Site Versions”


For more information about WSH, see WSH is included with
Microsoft Windows 2000 and Internet Explorer 5. To use WSH on computers running
Windows NT 4.0 without IE 5, you must download WSH from the WSH Web site.

Get the Free Newsletter!

Subscribe to Daily Tech Insider for top news, trends & analysis

Latest Posts

Related Stories