I was tired of always updating SCCM with new Dell driver packages. Some were getting as many as 15 new enterprise cabs over the deployment life. Then I discovered Dell Command|Update (DCU). Here’s what happened:
We had tried installing DCU during the OSD task sequence, but found that the software was throwing alerts to the logged in user that software was not up to date. We were certain that would generate calls to the service desk. Configuring it to not do that was kind of a chore. Uninstalling it at the end of the Task Sequence seemed counterproductive.
As I studied DCU some more, I found that:
- it has useful command line options,
- the application and its support files didn’t need to be any particular location,
- creating the required service so DCU could run was trivial,
- it was going to be a fun scripting project
- Download DCU (from here) and install it on a test PC.
- Next copy the application and service folders (“C:\Program Files (x86)\Dell\CommandUpdate” and “C:\Program Files (x86)\Dell\UpdateService”) to the SCCM source folder. I placed “UpdateService” folder inside “CommandUpdate” folder as seen below.

- Create the batch script that will be the brains of the SCCM Package (see below). In this example it’s called update.cmd and it’s saved in the above mentioned SCCM source folder.
@echo Off
SetLocal EnableExtensions DisableDelayedExpansion
:Pre
set sScriptPath=%~dp0
If "%sScriptPath:~-1%" EQU "\" set sScriptPath=%sScriptPath:~0,-1%
If not exist "%SystemDrive%\Logs" md "%SystemDrive%\Logs"
set LOGS=%SystemDrive%\Logs
if /i "%1" NEQ "" set sUpdateType=%1
GOTO :Main
:Main
sc create "DellClientManagementService" binPath= "%sScriptPath%\UpdateService\ServiceShell.exe" DisplayName= "Dell Client Management Service" start= auto >nul
sc start "DellClientManagementService" > nul
if /i "%sUpdateType%" EQU "" echo %date% %Time% No command line args >"%LOGS%\Dell_%sUpdateType%_Update.log" && Goto :End
if exist "%LOGS%\Dell_%sUpdateType%_Update.log" del /F /Q "%LOGS%\Dell_%sUpdateType%_Update.log"
if exist "%LOGS%\Dell%sUpdateType%Update.log" del /F /Q "%LOGS%\Dell%sUpdateType%Update.log"
if exist "%LOGS%\DellUpdate.log" del /F /Q "%LOGS%\DellUpdate.log"
if /i "%sUpdateType%" EQU "driver" "%sScriptPath%\dcu-cli.exe" /applyupdates -updateType=%sUpdateType% -updateSeverity=critical -reboot=disable >> "%LOGS%\Dell_%sUpdateType%_Update.log"
if /i "%sUpdateType%" EQU "application" "%sScriptPath%\dcu-cli.exe" /applyupdates -updateType=%sUpdateType% -updateSeverity=critical -reboot=disable >> "%LOGS%\Dell_%sUpdateType%_Update.log"
if /i "%sUpdateType%" EQU "bios" "%sScriptPath%\dcu-cli.exe" /applyupdates -updateType=%sUpdateType% -updateSeverity=critical -reboot=disable >> "%LOGS%\Dell_%sUpdateType%_Update.log"
if /i "%sUpdateType%" EQU "all" "%sScriptPath%\dcu-cli.exe" /applyupdates -updateType=%sUpdateType% -updateSeverity=critical -reboot=disable >> "%LOGS%\Dell_%sUpdateType%_Update.log"
find /i "code: 500" "%LOGS%\Dell_%sUpdateType%_Update.log" >nul && if not errorlevel=1 echo.&echo Return code 500 = No updates were found for the system when the scan operation was performed. (Not a real error)
find /i "code: 0 " "%LOGS%\Dell_%sUpdateType%_Update.log" >nul && if not errorlevel=1 echo.&echo Return code 0 = Command execution was successful. (Not actually an error)
find /i "code: 1 " "%LOGS%\Dell_%sUpdateType%_Update.log" >nul && if not errorlevel=1 echo.&echo Return code 1 = A reboot is required from the execution of this operation.
GOTO :END
:END
sc stop "DellClientManagementService" > nul
sc delete "DellClientManagementService" > nul
EndLocal
timeout /t 30
GOTO :EOF
- The CMD file understands 4 arguments (Lines 27 – 30) : Driver, Application, BIOS and All. If you create them as an SCCM package, you’ll have up to 4 programs, each with one of the above respective arguments. You can deploy them via Software Center or, with some modifications, GPO or whatever else you might have.
Supporting this site
The apps and scripts available here are free-ish. Here at GB/2 Labs, we really like the idea of Pay What You Want. If you find this post useful (or need some support), send what you feel the functionality (or support time) is worth to you or your organization. If your business requires it, contact us for a proper invoice. Otherwise, please consider a donation below.
Make a one-time donation
Choose an amount
Or enter a custom amount
Your contribution is appreciated.
DonateIf you’d like to send cryptocurrency (Bitcoin, Dogecoin, or Ethereum/US Dollar Coins/US Dollar Tether), see the addresses below.
BTC: 3JKbb5uATkxHHhYSqg49jBq8ykRXLjEHsF
DOGE: D96UZpWWQfDWW4u7DZKZCGCoWVsw6qGFFK
ETH/USDC/USDT:0x9356528d2b820426F6D82F4787724472232c097c
(Please note that ETH/USDC/USDT only support the ETH/ERC20 networks!)