Contrary to popular belief, Dell’s CCTK tools (now called Dell Command Configure) do not have to be injected into WinPE in order to make changes to the BIOS during the WinPE phase of a task sequence. This applies both to SCCM and MDT task sequences.
The benefit to not injecting CCTK into WinPE is that it can be updated and maintained without having to rebuild boot images.
To do this, simply create a package in SCCM with the required CCTK files, or in MDT create a folder in the deployment share. Do not create a program for this package. The components required are:
Next, create a task sequence that references the package you created. The first step will be to install HAPI, which can be done inside of WinPE. Since WinPE runs like a “live-cd” no changes will be persistent. Your task sequence should look like this:
In this example I am setting a wake-up time in the BIOS. Below are my commands for each of these steps in the task sequence:
cmd.exe /c HAPI\HAPIInstall.bat
cmd.exe /c cctk.exe --autoon=everyday
cmd.exe /c cctk.exe --autoonhr=22
powershell.exe -command $random = Get-Random -Maximum 60; cmd.exe /c cctk.exe --autoonmn=$random
powershell.exe -command "$log = 'C:\Windows\COMPANY_BIOS.txt'; get-date | out-file $log; .\cctk.exe --sysname | out-file -append $log; .\cctk.exe --mfgdate | out-file -append $log; .\cctk.exe --svctag | out-file -append $log; .\cctk.exe --biosver | out-file -append $log; .\cctk.exe --autoon | out-file -append $log; .\cctk.exe --autoonhr | out-file -append $log; .\cctk.exe --autoonmn | out-file -append $log"
cmd.exe /c HAPI\HAPIUninstall.bat
In MDT, these examples would look more like this since MDT cannot reference a package like SCCM can:
cmd.exe /c %SCRIPTROOT%\CCTK\HAPI\HAPIInstall.bat
In this example I am also uninstalling HAPI at the end of the task sequence because this is a separate task sequence that I am running inside of the operating system. Uninstalling HAPI is not required when running these steps inside WinPE (it’s not required at all actually, but I don’t want unnecessary parts left behind).
I am also using PowerShell to randomize the minute during which computers will wake up. This will prevent power spikes and the possibility of tripping circuit breakers when turning on 40 computers that are all in the same room.
Finally, at the end I’m generating a small report of the resulting BIOS settings and putting it in a unique file inside the C:\Windows folder. This will actually not work inside WinPE since it’s pointing to the C:\ drive of the OS, which would be mapped with a different drive letter inside WinPE.