I was working with a customer recently on a new Configuration Manager 2012 R2 implementation and we started to come across some content mismatches between the content library and the distribution point. This is nothing new to Configuration Manager and there is lots documented about this from 2007 and 2012 version of the product. One particular issue we had was to do with the Distribution Point Configuration Status falsely reporting the status of each distribution point (DP) as in the screenshot below:


These DP’s were functioning fine in the real world however somewhere along the line Config Manager assessed them to be less than 100% good, time for some deep digging into this one then.

You will notice that this screen evaluates a number of conditions for the DP but mostly the status is based around the validation of content on the DP. Now there doesn’t seem to be too much out there about this particular screen so after a little digging I see that it links back the SQL view vSMS_DPStatusInfo in your Config Manager database.


*Note this SQL screen is from a different environment.

Each icon in the console view obviously corresponds to the status type and each status type corresponds to a value in the Message State field of the SQL view.

1 - Success
2 - In Progress
4 - Warning
5 - Error

(not sure what happened to 3)

A number of the fields available are for informational purposes only and have no bearing on the status indicator. The status indicator depends only on the content validation status of each DP, this is the simplified logic behind that for each DP:

IF the package count on the DP = The number of packages that should be installed THEN MessageState = 1
IF the package count on the DP = The number of packages that should be installed + There are packages in progress THEN MessageState = 2
IF the package count on the DP = The number of packages that should be installed + There are packages in progress + There are package errors THEN MessageState = 2
Any other condition = Message State 5

The number of packages that should be installed basically means the number that the database thinks should be there.

So now we know the logic behind the screen, this is where my original problem comes in. I decided to start checking the validity of content on the distribution points.

Content Validation

There are a number of different components involved in content validation and equally a number of places you can look to start troubleshooting it. When you distribute or redistribute content to a distribution point, there is a validation performed at the end of the data transfer. The validation essentially is a content hash check against the source (content library) and the destination (distribution point). On the distribution point the WMI database is used to store details about the content that is has stored as well as in the content library on the distribution point. There is a comparison done against the values in the hash field in the dbo.SMSPackageHash table in your SQL database and the hash value that is generated on the DP during validation, any mismatches then result in a failure of the validation check. It’s also probably worth noting that when you perform a distribution or redistribution of content that a validation check is performed at the end of the data transfer. You can check progress of content validation (not distribution) with the log file smsdpmon.log. This file is located on distribution points in the D:\SMS_DP\sms\Logs location (assuming D: or look for your SMS_DP$ share), if your DP is on the same server as your site server then it will be located in D:\Program Files\Microsoft Configuration Manager\Logs (assuming D: again for your ConfigMgr install). Typical contents of this file are as follows:

Start to evaluate ...    SMS_Distribution_Point_Monitoring    17/03/2014 17:49:27    5680 (0x1630)
Start to evaluate package 'INF00020' version 1 ...    SMS_Distribution_Point_Monitoring    17/03/2014 17:49:27    5680 (0x1630)
Report status message 0x4000094C to MP    SMS_Distribution_Point_Monitoring    17/03/2014 17:49:27    5680 (0x1630)
Status message has been successfully sent to MP from remote DP    SMS_Distribution_Point_Monitoring    17/03/2014 17:49:28    5680 (0x1630)
Start to evaluate package share for package 'INF00020' version 1 ...    SMS_Distribution_Point_Monitoring    17/03/2014 17:49:28    5680 (0x1630)
Package INF00020 is verified successfully    SMS_Distribution_Point_Monitoring    17/03/2014 17:49:28    5680 (0x1630)

The dbo.SMSPackageHash table:


If you schedule a validation of content on the properties of your distribution point:


This simply adds a scheduled task onto the server to run on the schedule you set in the above console screen:


and you will see that it executes the smsdpmon.exe file.


You can obviously monitor this scheduled task yourself through task scheduler and also run it manually if required simply be running the task.

If you want to check the status of your package to see if a new hash has been generated you can also use the SQL table dbo.SMSPackages_G which gives you various pieces of information including the hash version amongst other things:


You should also start to see new values appearing in the NewHash field and an increment to the HashVersion as you change and re-distribute content to your DP.

In my scenario I could see in the smsdpmon.log that I had failures validating what was on my distribution point to the following effect:


The package data in WMI is not consistent to PkgLib
Pkg ABC00001 can’t be found in PkgLib

However when I checked the aforementioned SQL tables on the ConfigMgr I saw that the content wasn’t listed, it was long gone and deleted from the ConfigMgr console and content library. So there was a mismatch between the site server and the distribution point. This lead me to stumble across the following TechNet forum thread which discusses the problem I saw - http://social.technet.microsoft.com/Forums/en-US/d9dcf9a7-d19f-4831-9ac0-79b565d8aa74/failed-to-validate-content-hash-on-distribution-point?forum=configmanagerdeployment

Which in turn lead me to this TechNet blog post which describes content mismatches in a little more detail - http://blogs.technet.com/b/configmgrteam/archive/2012/05/07/troubleshooting-content-mismatch-warnings-on-a-distribution-point-in-system-center-2012-configuration-manager.aspx

Which in turn again lead me to this pretty cool PowerShell script from Bart Serneels - http://gallery.technet.microsoft.com/Powershell-script-to-fix-81dc4e69

The script essentially runs the following command:

Get-WMIObject -ComputerName $DistributionPointName -Namespace "root\sccmdp" -Query ("Select * from SMS_PackagesInContLib where PackageID = '" + ([string]($_.PackageID)) + "'") | Remove-WmiObject

This removes the reference to the package in WMI from the distribution point. If you prefer you can just run this line of PowerShell and replace the values accordingly. There are also other methods available to do this but I find this to be the easiest. Once you have done this you will need to run another validation. When this has completed you should find that your errors in smsdpmon.log will disappear, your status values in vSMS_DPStatusInfo should change and your Distribution Point Configuration Status screen in the console will now reflect those values and you should start to see nice green ticks.