Category Archives: Distribution Points

SCCM Cannot Disable Peer-Cache

SCCM peer cache was introduced in 1610 as a pre-release future and eventually made it into production.

As there was quite limited documentation around the feature at the time, there have been several eager admins who have likely  enabled this without understanding how it works and the consequences.

5

After disabling the feature in client settings, clients started to remove from the Super Peers list however not all.

To check the Super Peers list you will need go to the SQL database your SCCM instance is hosted on.

Select * from SuperPeers

Symptoms

The symptoms you will are slow OS deployement, slow applications download (Downloading stuck 0% for a while) from Software Center, or even when deploying updates.

CAS.log reported a long download locations list before the SCCM was even considered, so the server still reports these sources as active peer cache clients.

2

DataTransferService.log then reports a bunch of errors, because the feature is disabled on clients and content can’t be reached, then the client waits a bunch of seconds and proceeds with the next download location.

3

During OS deployment I noticed that placing a computer on the same subnet as the SCCM distribution point, it is considered first in the list, so the issue is … work-arounded?

4

Causes

I didn’t understand at first if this was BranchCache or PeerCache related. I tried a lot of things: re-enabling the feature then disable it again, changed my boundaries and boundary groups so that they are managed by IP address range, removed the “Allow clients to share content[…]” from applications (which is BranchCache related).

https://blogs.technet.microsoft.com/umairkhan/2017/06/12/configmgr-1702-the-case-of-unexplained-client-peer-cache-not-getting-disabled-even-after-disabling-it-via-client-settings/

This is the exact case. Read it, because this is gold. Even the introduction and myth-busting about BranchCache and PeerCache is worth a read.

The setting is disabled on computers, but the site server is not aware. Apparently there’s an issue when the client sends back a state message stating  to the site server, I’m not a superpeer, remove me from the list.

Verifying the WMI informations on a “guilty” computer (one of those appearing in CAS.LOG) with WMI Explorer

6

The setting is consistent with the deployed client settings. So the computer knows.

Let’s see if the client is in the “SuperPeers” table on the DB

Select * from System_DISC where Name0 like ‘ComputerName_still_in_Superpeer_list’

get the ItemKey from there, and

Select * from SuperPeers where ResourceID = ‘ItemKey’

7

8

So the client is still a SuperPeer for SCCM, and the same ResourceID also appears in SuperPeerContentMap for every application or package it is (was) able to distribute.

Select * from SuperPeerContentMap where ResourceID = ‘ItemKey’

9

So, how do we get rid of this data (which is now complete garbage, since I disabled the setting globally) ?

The Fix

As always make a backup of your database before running these commands. This will delete all the table information for Peer Cache information.

delete from SuperPeerContentMap

delete from SuperPeers

Test again from your clients to verify that everything now works!

Error sending DAV request. HTTP code 500 (HTTP Error 500.19 – Internal Server Error)

From a client they were not able to download any content, after investigation the DataTransferService.log I could see the following error

Error sending DAV request. HTTP code 500, status 'Internal Server Error'   DataTransferService       24/08/2017 8:21:17 AM       3972 (0x0F84)

GetDirectoryList_HTTP('http://SERVERNAME:80/SMS_DP_SMSPKG$/f4e4ea5d-49ad-423a-9cac-cea869e6e1d7') failed with code 0x87d0027e.      DataTransferService       24/08/2017 8:20:47 AM  28624 (0x6FD0)

After browsing to the server http://localhost/SMS_DP_SMSSIG$ it would return a HTTP Error 500.19 – Internal Server Error.

As WSUS was previously installed on this sever it was the culprit behind it. I had a look at the ApplicationHost.config file and noticed that suscomp.dll was still installed by WSUS even though it had been removed.

To verify that suscomp.dll is configured

  1. Go to C:\windows\system32\inetsrv\config and locate the ApplicationHost.config file
  2. Open it with notepad and look for the following lines below
    scheme name=”xpress” doStaticCompression=”false” doDynamicCompression=”true”
    dll=”C:\Windows\system32\inetsrv\suscomp.dll” staticCompressionLevel=”10″
    dynamicCompressionLevel=”0″ />

Resolution

  • The following command needs to be run to disable the suscomp.dll that was installed when the WSUS server role was installed.From an elevated command prompt running the following.
    %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-[name='xpress']
  •  If you need to re-enable this just change it slightly and run this command.
     %windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+[name='xpress',doStaticCompression='false',dll='%windir%\system32\inetsrv\suscomp.dll']

Content Mismatch Warnings on a Distribution Point

You might see content mismatch warnings in SCCM when content validation runs and determines that there is a discrepancy between the expected list of packages in WMI on the distribution point and the packages in the content library. In this scenario, the distribution point status goes into a warning state and the status message returned by the distribution point is listed in the Details pane when you view the status of the distribution point in the Monitoring workspace, Distribution Point Configuration Status node.

To determine which package is causing this mismatch, review the smsdpmon.log file on the distribution point.

Notice the log entries:

CContentDefinition::LibraryPackagesWmi: The package data in WMI is not consistent to PkgLib
CContentDefinition::LibraryPackagesWmi: Package CCA0000A can’t be found in PkgLib

The simplest way to determine the missing package is to view the Content Status  in the Monitoring workspace and search for the package ID by using the search field. After you have found the package ID, you can determine the name of the software.

If the package is not on the site, you must remove the package from WMI on the distribution point. The namespace to connect to is rootsccmdp. The class that contains the list of packages expected is SMS_PackagesInContLib. The simplest way to find the package and remove it from WMI is to run a query on the distribution point such as the following, and then delete the object that is returned.

select * from SMS_PackagesInContLib Where PackageID = ‘CCB00002’

Note: Ensure that you replace the CCB00002 with your own package ID

If the package is on the site, you can update the content on the distribution point to clear the Warning state.

If the error still persists you can use this script to remove the offending packages/applications.

Download the Script from TechNet

 

SCCM Redistributing Multiple items on a distribution point(s)

Like many SCCM admins,  one of the common issues we come across is a distribution point with failed packages. This may occur due to many reasons such as a bad link, corrupt content, disk space etc. just to name a few.

It is rather painstaking though in SCCM that you cannot refresh multiple items from the console, limited to using the distribution point  content in monitoring to refresh by content only and not by distribution point . Luckily though there is a script to do the work for you.

This script checks all packages assigned to a distribution point  and redistributes any packages that have an error status.

To use the script (Download at the end of the post), modify the VBS file to put in your server details in the variable section

‘ The name of the CAS/Primary site server
Public Const CASServerName = “CASorPRIServer”

‘ Which DP to refresh packages for – leave this blank to check ALL DPs
Public Const DPServerName = “DPServer”

Once done open Command Prompt as administrator. Change Directory to where the script it stored and type in cscript DP_Refresh.vbs press Enter

The script will now refresh the DP, you can view the status in the console.

Download Script Here