Monday, 28 February 2011

SMSMap 1.5.1 Released

Just a quick one, for those that use it SMSMap has been updated to v1.5.1 and can be found here:

Two new features added:
  • New: Added support for ConfigMgr up to R3   SP2 - v1.5.1
  • New: Added FEP support - v1.5.1
For those that don't know what it is then I recommend you take a look if you have Configuration Manager in your environment.

From the site:
SMSMap is a  freeware ConfigMgr 2007 / SMS 2003 hierarchy drawing tool. It is an all-in-one solution for creating Visio drawings of any combination of ConfigMgr 2007 and SMS 2003 site servers.

Thursday, 17 February 2011

Windows 7 Service Pack 1 (SP1) Released

I almost missed this one since it hasn't had the usual trumpets and fanfares.

Starting yesterday (16th Feb), Windows 7 and Windows Server 2008 R2 Service Pack 1 (SP1) was released to MSDN & Technet Subscribers.  Release to Windows Update & the Download center will start on the 22nd Feb.

More Information on SP1 can be found at the following pages:

Information about Service Pack 1 for Windows 7 and for Windows Server 2008 R2

Windows 7 Service Pack1

Windows Server 2008 R2 Service Pack 1

Documentation Download for SP1 (Included Hotfixes, Deployment Guide, Hotfixes)

Saturday, 12 February 2011

Asset Management Solution - Problem!

If you've taken a look at the Asset Management solution I posted last month, you might want to hold off putting it into production, I've found a problem.

The problem is with the "Equipment Cost" property extension used in both the core as well as the

Both MP's use a similar property which is a decimal value type:

<Property ID="EquipmentCost" Type="decimal" AutoIncrement="false" Key="false" CaseSensitive="false" MaxLength="7" MinLength="0" Required="false" MinValue="0" MaxValue="5000000"/>

This was created using the Authoring Tool, and while there is a known issue with it truncating the values, I've found another.....

I noticed the Data Warehouse starting to log event ID 33502 & 33503 messages

I logged a support call with Microsoft and once we started digging we found that it had created it in the databases in differing formats.

In the operational DB it had created it as decimal(7,0)

In the Staging and Config DB it had created it as decimal(7,0)

In the Repository DB it had created it as decimal(7,6)

In the DataMart DB it had created it as decimal(7,6) 

Microsoft Support are still investigating the issue and I'll post back as soon as I have a resolution.

Thursday, 10 February 2011

Using Opalis to automate the gathering of Dell Warranty information and update Service Manager with it

For ages now there has been various vb scripts around that has allowed the Dell Warranty website to be checked in a scripted fashion by passing a service tag number across in a url and parsing the returned html for the required information.

One really cool usage of this was using ConfigMgr to run the script on PC's and add the information into WMI for inventorying later via mof edits.
Sherry Kissinger has an excellent article here:

While this is great for active clients, once the device is decommissioned or you have problems with the client and remove it from SCCM for one reason or another, your data is gone!  Not so good for long term reporting or asset management.

Since I'm in the process of migrating all of our asset management reporting and information storage into Service Manager 2010, warranty expiration, start date, type etc was one of the main items of information that we needed to store so I started to think how I could automate this as much as possible.

3 Options sprang to mind:
  1. Supply Dell with a list of all our service tags and then CSV import it - allows large bulk updates but takes time if large volumes of updates required again.
  2. Implement the SCCM scripts then create a custom connector to gather the data - overly complex for my liking and duplicates the information storage
  3. Use Opalis to gather the data and update Service Manager - Sounded cool ;)
I went with option 3 mainly because it sounded like a cool idea to play with, but also seemed the most straight forward.

Things to note:
  • This is proof of concept, failure handling etc would need adding for production
  • I've extended the Windows Computer class in advance with a "Warranty Expiration Date" property.  You could in theory extend any class to hold it, Computer (Deployed) might be more fitting but I've got other reasons for choosing the Windows Computer class.

So.... I created a policy that looks something like this:

First step is to get the GUID's of the Windows Computer objects, and then query them for their relationships with Computer (Deployed) objects.
Second Step is to then get the related Computer (Deployed) object which then gives us access to the Serial Number (Dell service tag) via the Opalis Databus and then pass it across to a Powershell Script.

 This is basically where the "magic" happens, the powershell script.
All credit for this goes to Marcus Oh and his blog post here:

I've only tweaked his PS code slightly by adding proxy details so that I could get out of our network, added an underscore ( _ ) to the $sData = $sData | Select-String "contract_" line to stop an error about javascript that was happening and flattened the output by adding $Warranty =$cMyData | foreach {$_.EndDate} to only output the warranty end date.  Same principal could be applied for start date, days left etc or output it all and do the manipulation in Opalis.

$sSerial = "{Serial Number from "Get Object - Computer (Deployed)"}"
$oWeb = New-Object System.Net.WebClient
$proxy = New-Object System.Net.WebProxy("YourProxyServerHere:8080")
$proxy.UseDefaultCredentials = $true
$oWeb.proxy = $proxy
$sUrl = "$($sSerial)"
$sData = $oWeb.DownloadString($sUrl)
$sData = $sData -creplace '<a style.*?>', ''
$sData = $sData | ForEach-Object { $_ -replace "<i>", "" }
$sData = $sData | ForEach-Object { $_.Split("<") }
$sData = $sData | Select-String "contract_"
$sData = $sData | ForEach-Object { $_ -replace $_,"$_`n" }
$oRegEx = [regex]'"contract_.*row">(.*)'
$cMatches = $oRegEx.Matches($sData)
$cMatches = $cMatches | ForEach-Object { $_.Groups[1].value }
$cMyData = @()
foreach ($i in 0..($cMatches.count -1)) {
    $cRecord = New-Object -TypeName system.Object
    [void] $foreach.MoveNext()
    $cRecord | Add-Member -MemberType noteProperty -Name 'Provider' $cMatches[$foreach.current]
    [void] $foreach.MoveNext()
    $cRecord | Add-Member -MemberType noteProperty -Name 'StartDate' $cMatches[$foreach.current]
    [void] $foreach.MoveNext()
    $cRecord | Add-Member -MemberType noteProperty -Name 'EndDate' $cMatches[$foreach.current]
    [void] $foreach.MoveNext()
    if ($cMatches[$foreach.current] -ne "") {
        $cRecord | Add-Member -MemberType noteProperty -Name 'DaysLeft' $cMatches[$foreach.current]
    } else {
        $cRecord |
        Add-Member -MemberType noteProperty -Name 'DaysLeft' "0"
    $cMyData += $cRecord
$Warranty = $cMyData | foreach {$_.EndDate}

Final steps, we'll split the incoming data to make it easier to handle, we'll assume for this PoC that the FIRST field returned is the correct warranty expiration date (it seemed to be in all the ones I manually checked).

Then we'll format that returned data into a date format that can be used by Service Manager.

Then finally we'll update the extended property created earlier with the information.

Et Voila!  This could either be setup now to run when objects are updated by using the "Monitor Object" SCSM IP component and scoping it for updated serial number properties, or schedule it to run at scheduled times or even just manually when you desire.

Remember, this is proof of concept, it works in my test lab, but will need developing and testing before you would use it in a production environment.

Friday, 4 February 2011

Cumulative Update 1 for System Center Service Manager SP1 Released!

Not much to say on this one, so this is basically a cut and paste from the engineering blog:

However, 2 things to note.
  1. The KB 2484853 article referenced on the download page doesn't current;y work as someone's put a space in the URL, try this instead:
  2. This cumulative update applies to the following Service Manager components only, no console update:
  • Service Manager Management Server (SM Server)
  • Data Warehouse Management Server (DW Server)
The first cumulative update for SP1 is now released.  This must be applied on top of a SP1 installation.  It fixes the following issues:
  • Extending a large-volume class hangs the console indefinitely
  • Adding 25th child item on a list results in an error
  • DW data loss for relationship fact tables with properties
You can download it from here:
There is also an Authoring Tool management pack library update with this so make sure you update the management packs in your library wherever you have the authoring tool installed.

Tuesday, 1 February 2011

Operations Manager Cumulative Update 4 - (SCOM CU4) Released

It's time for another cumulative update for SCOM 2007 R2, this time number 4!

We've not got it installed here yet, that will be Robs job next week, not that he'll know until he reads this ;)

You can download it from here:

And in the imortal words of Marnix, RTFM here, over and over:

Biggest fix this time round for me is the fixing of Pro Tips from SCVMM.

Kevin Holman has his always excellent installation guide and personal experience with CU4 blogged here:

Marnix Wolf has his views on it here: