Thursday, March 5, 2015

Adding SCCM 2012 Client CU Patches, A Different Approach

The Update of the Client in the TS is challenging....

I've been working on the problem of how to patch the Configuration Manager Client Up to the Currnet CU level deployed in my infrastructure since we first rolled out SCCM 2012 RTM a couple years ago. In that time I have tried a couple of approaches and followed the various blogs which typically come down to the use of the PATCH public property of the Client .MSI.

However this has met with varying degrees of success and several problems in my environment.

I want to start by saying I have been informed by a couple of reliable sources that the PATCH property isn't actually recommended, supported, or really even reliably tested by Microsoft.  So I suppose any use of it is best effort, and if it works "lucky you".

That said...I DON'T use it.

Why?

The PATCH property only "sort of" works.

What does sort of mean:
  1. The pathing for it can be tricky, using variables in the path as some articles point out can be tricky, or just plain not work.
  2. I've seen problems with using it when deploying on machines with more than one drive. The system will throw the files on the secondary drive when it goes to apply the patch and then the Client install bombs out entirely because it can't find the patch files.
 So What do I do to get the Client Patched during OSD deployment:

To get the Client Patched I've gone a bit "Old School" and approached it as a true patch install, I arrived here by sitting at my desk one day, and thinking "Well its .MSP" so shouldn't I be able to use it like any other .MSP and install it with "MSIEXEC /P"

I removed the PATCH property from my Client install command line, and tried the patch install as a separate "Run Command" step and after a little trial and error got it working, I haven't looked back since.

Up front warning, since I have personally chosen to avoid any use of variables my syntax assumes that the system drive and therefore the drive the Task Sequence is running from is C: if this isn't true of your OSD setup then YMMV.

  1. Create a new Copy of the Client Install package
  2. Put a Patch folder under this with an X86 and a X64 subfolder...basically the same as articles about using the PATCH property
  3. Put the SCCM Client patch or patches (CU3 needed a couple of hotfixes in addition to the one to patch things up to CU3)
  4. Set this up a Old Style Package in Config Manager, Mine ends up being package ID PS100540...distribute this.
  5. Make this package the package used by the client install step.
  6. After the Client Install Step in the TS add a reboot step
  7. Create a Run Command line step in the TS and apply the Client Patch for the current CU with a "MSIEXEC /P" command line.
    ex..."msiexec /p C:\_SMSTaskSequence\OSD\PS100540\Patch\x64\configmgr2012ac-r2-kb2994331-x64.msp /qn REBOOT=R"
  8. Add another Reboot Step
  9. Add similar patching steps followed by a reboot step for each Client Hotfix