Dell Command Update via Task Sequence

Updating BIOS & Drivers using a Task Sequence, OSD, IPU, Stand alone.

Why DCU (Dell Command Update)?  Why not driver packages?  First off, this solution isn't right for some, and frankly is a horrible solution in many environments, but for others, it can be a life saver.  If you don't have time to keep all of your driver packages updated for your 30,40,50 + Dell models in your environment, if you have good internet bandwidth on the clients, and you just want to make sure your machines are at the latest BIOS / Drivers at time of OSD, then this works pretty well.

Disclaimer... I use this in my Lab, I have a Dell 7470, so that's the extent of my testing.  I used to use this at my previous organization, with 30+ models and worked very well.  It's handy because if a new model comes in the door, you don't have any prep work, connect it up, and image, drivers and bios come right from Dell.
Other notes, this builds off my original post a few years back (when I used it in production).  There is some other tips there that might come in handy if you run into any issue with brand new models requiring storage drivers or network drivers: https://garytown.com/say-goodbye-to-dell-driver-management-use-dell-command-update-in-osd

I've currently tested running this Task Sequence as a child TS in OSD & IPU scenarios, as well as just deploying the TS itself to a device and running it stand alone.  This works in OSD after the OS is laid down, it does not support WinPE, so if you want to update your BIOS in the WinPE stage... sorry.

Please report any observations or tips in the comments, thanks.  Other observations I've made about DCU: https://garytown.com/dell-command-update-tips-for-enterprise-automation

Requirements: CCTK Package, (more about that later), Dell Command Update Package 2.4 (or use the step I created that downloads and installs DCU from the internet), Custom Policy.XML files (I've included mine in the download), ideally some idea of the Task Sequences I've provided for WaaS to understand the reporting steps.

Do not use anything newer then 2.4 (at this time), 3.X currently has no CLI support.  I hear they will be updating 3.x to include CLI, but no ETA.  I have asked for many CLI enhancements, which would remove the need to even import a policy, as well as provide a BIOS password and have DCU suspend bitlocker with a parameter. I'm still waiting on all that. 🙂

Now to the goods...

Download: Dell Command Update Task Sequence (100 downloads)

image

What this Task Sequence Does (High Level):

  1. Checks for DCU and Installs if DCU is not installed then reboots
  2. Creates Folders for Logs & DCU Templates, the copies down my templates
  3. Creates Variables used later in reporting
  4. Check if BIOS Update Available
    1. Import BIOS / FIRMWARE DCU Template
    2. Runs DCU in Report Mode, generating a Report only if update exist
    3. Check if Report exist, if Yes, Run DCU BIOS Group
    4. if No Report, skip group to cleanup
  5. Update Group Runs
    1. Gets Info (Gather)
    2. Records Current BIOS info (for Reporting)
    3. Removes Current BIOS Password (CCTK)
    4. Suspend Bitlocker (if Enabled)
    5. Runs DCU to Update BIOS
    6. Adds BIOS Password back
    7. Reboots Machine
    8. Records new BIOS info (for Reporting)
    9. Enables Bitlocker (if Bitlocker is used)
  6. Clean Up
    1. Clears out the DCU Policy
  7. Check for Driver Updates
    1. Import Driver DCU Template
    2. Run DCU in Report Only mode
    3. if Report is generated run DCU Update group, else skip
  8. DCU Updates
    1. Run DCU and install all available Drivers
    2. Reboots
  9. DCU Cleanup
    1. Cleans up folders and files used
    2. Imports DCU Defaults Policy
    3. Run Script to record results to registry (For Reporting)

So that is the basics of it.  This was the easiest way I could do it to control the reboot, so it would only reboot if updates were installed, it also creates a nice report (if updates are available) of what updates were available, and hence installed.  I also separate the BIOS from Drivers for tighter control. I only wanted the BIOS Password removed for the shortest possible time, which was by doing it this way.

Another reason I did it this was to show it can be modular, you don't have to download and install everything Dell is pushing, you can pick and choose.  You can greatly customize your Policy XML file to have it do other things as well, like Dell Command Suite Apps, etc.  I'd recommend spending time in the GUI changing settings, run the scan, see what you get, then change it, scan again to see the differences.  For my environment, I basically narrowed it down to BIOS/FIRMWARE settings check boxes for one Policy template, and Drivers Category, and all sub categories checked for my Drivers Policy.  Check out my previous post for more info on that.

Steps & Conditions
Few notes about some odd things... All Steps that call dcu-cli.exe, I've set to continue on error.  Importing a Policy always kills the TS and throws error, but I've noticed it does import the policy despite the error.  I've also had it error on running the updates, returning non-0 exit codes, so I've set those to continue as well.  Also, to get the dcu-cli to run, I had to do cmd.exe /c start /wait  in front of the command or I'd get a really messed up error, I'll try to record that here later once I reproduce the issue.  It was odd, everything worked perfectly in Elevated Command Prompt, but not during a TS.. that fixed it.

 

  • Dell Command Update
    WMI Query: select * from Win32_ComputerSystem where Manufacturer like "%Dell%"
  • Install DCU
    • Set TSVar DCU Installed
      • DCUInstalled = TRUE
        Condition: File exist: C:\Program Files (x86)\Dell\CommandUpdate\dcu-cli.exe
    • Set TS Var "SMSTS_UpdateTime"
    • Install DCU 2.4.0 from Internet
      Condition Var DCUInstall not True
    • Restart Computer if DCU Installed
      Condition Var DCUINstalled not True
    • Make Folder for DCU Results
    • Make Folder DCULogs for Logs
    • Copy XML File Local
      Package = your package with the DCU Policy Setting XML files
    • Set Var SetOSDInfoType = DCU
      • SetOSDInfoType = True
        Condition: SetOSDInfoType not exist
    • Set TS Var "SMSTS_Build" if not set
      • Condition: SMSTS_Build not exist
  • Run DCU BIOS
    • Set TS Var "SMSTS_BIOSStartTime"
  • Run DCU Report if BIOS upgrade available
    • Modify Dell DCU - Import Settings - BIOS
    • Run Dell Command Update Report Only (BIOS)
    • Copy Report to Log Folder
  • Run DCU if BIOS Updates exist (Condition: File: %programdata%\DCU\DCUUpdatesBIOS.xml Exist)
    • Gather Variables - Run PS Script from Gallery
    • Set TS Var CurrentBiosVer
    • Dell BIOS - Enable HAPI - HAPI\HAPIInstall.bat
      Requires your CCTK Package
    • Start OSDDoNotLogCommand: TSVar: OSDDoNotLogCommand = True
    • Set Password Variable - BIOSPWD = YOURBIOSPASSWORD
    • Dell BIOS - Remove Password: Requires your CCTK Package
    • Suspend Bitlocker (Condition TSVar IsBDE = True)
    • Stop OSDDoNotLogCommand: TSVar: OSDDoNotLogCommand = False
    • Run Dell Command Update Install BIOS
    • Start OSDDoNotLogCommand: TSVar: OSDDoNotLogCommand = True
    • Dell BIOS - Remove Password: Requires your CCTK Package
    • Stop OSDDoNotLogCommand: TSVar: OSDDoNotLogCommand = False
    • Restart Computer
    • Set TS Var NewBiosVer
    • Enable Bitlocker (Condition TSVar IsBDE = True)
  • DCU BIOS CleanUp (No Conditions on Group)
    • Clear DCU Policy
    • Set TS Var "SMSTS_BIOSFinishTime"
  • Run DCU Drivers
    • Set TS Var "SMSTS_DriversStartTime"
  • Run DCU Report if Drivers available
    • Modify Dell DCU - Import Settings -All drivers
    • Run Dell Command Update Report Only (DRIVERS)
    • Copy Report to Log Folder
  • Run DCU if Updates Exist (Condition :File: %programdata%\DCU\DCUUpdatesDrivers.xml exist)
    • Run Dell Command Update Install Driver Updates
    • Restart
  • DCU CleanUp
    • Set TS Var "SMSTS_DriversFinishTime"
    • Remove Folder ProgramData\DCU
    • Modify Dell DCU - Import Settings -Defaults
    • Record Results for Reporting
      • Run PowerShell Script
      • Parameters:-ID "%SMSTS_Build%" -WMI -Registry -Class "%SetOSDInfoType%" -Namespace "GARYTOWN"

         

OK, So that is the long beast... you can remove many of those steps if you don't care about recording metrics.  The Script should look familiar if you know my work, it’s 99% stolen from Jason Sandys blog.  If you use my SetOSDInfo script in your WaaS task sequences, you could easliy just add the few changes into that, but to make this standalone, I created a separate script.  Yes, you could acutally do everything in about 20 lines of code instead of several hundred.. but I like to re-use common code sets... to make the script I copy and past pretty much all of it, then added the 15-ish lines I needed.

Notes about the command line steps, you'll see

Results when run with OSD:
image
It records before & after BIOS versions, along with the time taken to run the BIOS Update and the Driver Updates.

XML Reports:
image

Note that is also logs the activities log to c:\windows\ccm\logs folder, which is a very detailed log (in XML) of the DCU-CLI step process

If you need help making a CCTK package, please check out this Post by Mike Terrill: https://miketerrill.net/2015/08/24/how-to-create-a-dell-command-configure-package-in-configmgr/

 

Posted on GARYTOWN.COM

2 thoughts on “Dell Command Update via Task Sequence”

  1. Nice blog, Gary! A year or so ago I was using DCU in task sequences and never had to use the start /wait and C:\"Program Files (x86)". I thought maybe this was a symptom of version 2.4.0 of DCU but I also just tried version 2.3.1 which I was using a year ago, and had the same issue with it. So it seems like a change in CM may have caused this weird behavior (tested with 1810).

  2. Based on your Dell Command Update post you did a couple of years ago, I manage all my 12 Dell models and Lenovo 7 models using Dell Command Update & Dell Repository Manager for Dell and Lenovo Update retriever and Thininstaller for Lenovo and it works really well. I used to have it setup like you where I would just download the latest drivers and BIOS updates from Dell directly but I had multiple times where Dells ftp site went down so my SCCM builds would fail because it could not connect to the site. I use Dell Repository Manager now to make a local repository so I can manage what drivers get installed and I am now not dependant on Dell's website every time I build a machine. I would love to send you my documentation for how I manage my Dell and Lenovo machines and our process. you have helped me out many times over the 5 years of SCCM/desktop administration.

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.