SCCM 2012 Applications - Speeding up slow deployments

A common problem with SCCM can be the long delays after OS deployment for a full compliment of applications to be installed.  

A decade ago, as the number of machines within organisations increased, the ability of using simple scripts for the deployment of software suffered.  An administrator couldn't allow all of their workstations to start installing a package at exactly the same time as the stress on deployment servers and networks could bring the entire process to a halt. To prevent this congestion some clever scripting was used with Excel workbooks to drip-feed software deployments to machines.

Today, we don't need to worry about limiting the number of machines that are deployed at once.  SCCM automatically staggers the deployment of software by having clients poll for updates.  The default polling interval for SCCM 2012 clients is once every 60 minutes.  This means that a machine will only check in once every hour for new instructions (such as installing software).  It's great for ensuring that a system is scalable without causing the congestion and system failures of a decade ago but it represents a problem if newly built machines cant be used due to software not being available.  

We really need two types of software deployment polling - one for machines being built and one for everything else.

Client Settings - Polling Interval

Using WMI queries we can apply the aggressive polling setting to newly built machines while ensuring their polling cycle is reduced to something more reasonable after a few hours.  This means that software is quickly delivered to a newly built workstation.

 With this scenario, I have created a second "Initial Client Settings" package.  This package has a polling time set to 5 minutes.  

A new Device Collection will be needed for the Client Settings package.  The members of this collection are determined by a WMI Query.

The synax for including machines that have only been built within the previous day is:

select SMS_R_SYSTEM.ResourceID,SMS_R_SYSTEM.ResourceType,SMS_R_SYSTEM.Name,SMS_R_SYSTEM.SMSUniqueIdentifier,SMS_R_SYSTEM.ResourceDomainORWorkgroup,SMS_R_SYSTEM.Client from SMS_R_System inner join SMS_G_System_OPERATING_SYSTEM on SMS_G_System_OPERATING_SYSTEM.ResourceId = SMS_R_System.ResourceId   WHERE dateDiff(dd, SMS_G_System_OPERATING_SYSTEM.InstallDate, GetDate()) < 1 and DATEDIFF(HH, SMS_R_System.SMSUUIDChangeDate, GETDATE()) <= 1  

SMSUUIDChangeDate is important because if you reinstall Windows on a workstation, the Unique Identifier for the installed client will always change whereas relying on the date the actual object was first created is not so reliable..  


The package will need to be deployed to the created Device collection.  As it has a lower priority number than the original "Default Client Settings" it will take priority itself.