Onboarding Fujitsu Machines

When onboarding Fujitsu machines, the ImmyBot install does errors out.

As a workaround we flatten the machine with a new Windows Install and install Immy.

This removes all the Fujitsu drivers (trackpad and audio are unusable etc)

We can fix this by going to Fujitsu Technical Support pages from Fujitsu United Kingdom to download the correct version of Fujitsu DeskUpdate Fujitsu Technical Support pages from Fujitsu United Kingdom

After running this tool, it downloads and fixes all the driver issues (after a reboot).

Ideally, if we could get Immy.Bot to automate this process, that’d be great

DeskUpdate can definitely do this, and I built a script under our old automation platform to manage it. The problem was that one day it would work fine, then there would be an update to DeskUpdate and it wouldn’t work anymore. And I think the installed version had to be the latest.

The magic incantation I used (and I suppose it is still the same) was:


But obviously also some extra logic to capture the return code from each command and something to parse the output or logs etc.

For ImmyBot you’d also want a “check if already up to date without actually installing” so that the Inventory could capture the current state. I don’t know what the commands for that are but they probably exist.

lol I just checked ImmyBot - “Fujitsu DeskUpdate” - New - Updated 5 minutes ago.

I guess someone is already working on it :slight_smile:

Amazing, you’re right. It’s there.

Although, this looks like it installs in but doesn’t run it?

@cdmisp as you found out the deployment has been made to at least install the DeskUpdate app for now.
This still currently will need to be manually ran but at least saves your team the time of manually having to go find it and manually install it.
If you check the notes on the deployment we were also able to create a filter script for Fujitsu computers.

@James_Harper was a help to point in the direction that making it run would be possible and I was able to find a resource here that may assist us getting it to do so Ducmd - Fujitsu DeskUpdate Powershell Skripte • it-runs.de
(Leaving here mostly for reference for when we come back to review further)

This is a bit more of a time sink and we also have no computers to test it against ourselves and may take a bit of time to try dig into it further to get that part of it working/if possible to make it work.

Thanks guys, this has been really helpful. having it auto-install is really helpful and like you says, saves us that job.

Will look into the scripts, if we get time too. But we lack the expertise of your team(s).


I’m building a fujitsu laptop now so I threw this together. You’ll need to clone the Software definition so you can add a new configuration task (or just create a new configuration task and be sure to have it run after the software install). Only problem is it doesn’t work. ducmd /install /drv /web just always fails to download the first package (not a fault of my script - it does this even if I run it from a command prompt)

I’m interested to know if ducmd works for you? Maybe Fujitsu are cross at me for abusing their deskupdate download pages trying to get dynamic versions working :slight_smile:

$DuCmd = Invoke-ImmyCommand {
    $DuCmd = "C:\Program Files (x86)\Fujitsu\DeskUpdate\DuCmd.exe"
    if (!(Test-Path $DuCmd)) {
        $DuCmd = "C:\Program Files\Fujitsu\DeskUpdate\DuCmd.exe"
    if (!(Test-Path $DuCmd)) {
        Return $null
    Return $DuCmd
if ($DuCmd -eq $null) {
    Write-Error "DuCmd not found"
    Return $False

if ($method -ne "set") {
   Write-Host "Checking Updates"
   $Updates = Invoke-ImmyCommand {
      $DuCmd = $Using:DuCmd

      $process = New-Object System.Diagnostics.Process
      $process.StartInfo.UseShellExecute = $false
      $process.StartInfo.RedirectStandardOutput = $true
      $process.StartInfo.RedirectStandardError = $true
      $process.StartInfo.FileName = $DuCmd
      if($Args) {
         $process.StartInfo.Arguments = ("/LIST", "/WEB")
      $out = $process.Start()
      $StandardError = $process.StandardError.ReadToEnd()
      $StandardOutput = $process.StandardOutput.ReadToEnd()
      if ($Process.ExitCode -ne 0) {
         Throw "Failed to get updates - $($Process.ExitCode)"
      $Updates = ([regex]::Matches($StandardOutput, "\[ID] ([^`r`n]*)") | % { $_.Groups | ? { $_.Name -eq 1 }}).Value
      return $Updates
   Write-Host "Found $($Updates.Count) update(s) to install"
   return ($Updates.Count -eq 0)

$count = 5
do {
   Write-Host "Installing Updates"
   $ExitCode = Invoke-ImmyCommand -Timeout 600 {
      $DuCmd = $Using:DuCmd

      $process = New-Object System.Diagnostics.Process
      $process.StartInfo.UseShellExecute = $false
      $process.StartInfo.RedirectStandardOutput = $true
      $process.StartInfo.RedirectStandardError = $true
      $process.StartInfo.FileName = $DuCmd
      if($Args) {
         $process.StartInfo.Arguments = ("/INSTALL", "/APP", "/DRV", "/WEB", "/X")
      $out = $process.Start()
      $StandardError = $process.StandardError.ReadToEnd()
      $StandardOutput = $process.StandardOutput.ReadToEnd()

      Write-Host "Install returned $($Process.ExitCode)"
      Write-Host $StandardError
      Write-Host $StandardOutput
      return $Process.ExitCode
   switch ($ExitCode) {
      0 {
         Write-Host "Updates completed successfully"
      300 {
         if ($rebootPreference -eq "Suppress") {
            Write-Warning "A reboot is required to complete updates but reboots are suppressed"
         Write-Host "Rebooting to complete updates"
      default {
         Write-Host "Error $ExitCode. Retrying $Count more time(s)"
} while ($count -ge 0)

   100 : Invalid PCI ID list for the package
   101 : Your system is currently not supported.
   102 : An update is required
   103 : DeskUpdate can only be started once.
   104 : Invalid (unexpected) manufacturer
   105 : No valid data source found
   106 : File could not be deleted
   107 : The configuration file could not be read.
   108 : Failure reading the BIOS table
   109 : This BIOS package does not support the Silent Update feature.
   110 : BIOS update failed
   111 : A project could not be found
   112 : Missing password for proxy user. Please set password for user in config
uration file. For more information can be found in ReadMe file. {0}
   120 : The licence was not accepted.
   200 : Package not found
   201 : Package update not found
   211 : A database exception occurred when searching for system information.
   212 : An exception occurred when retrieving the list of system information
   213 : A database exception occurred when searching for system information on
the basis of the package information.
   214 : Database exception during the search for a package
   215 : The DeskUpdate version could not be read
   217 : The list of operating systems could not be read
   305 : The server certificate is invalid.
   306 : Authorisation failed
   307 : File could not be saved.
   309 : The connection to the download server could not be established The serv
er responded with an error code.
   310 : The download has been aborted.
   311 : The system information could not be retrieved from the deleted source.
   312 : List of systems could not be retrieved from the deleted source
   313 : The system information for this system board, this operating system and
/or this architecture was not found on the deleted source.
   314 : The selected systems could not be retrieved from a deleted source
   315 : The latest version of DeskUpdate could not be retrieved
   316 : The DeskUpdate package could not be downloaded
   317 : BIOS version could not be retrieved from the deleted source
   321 : The package for updating the DeskUpdate could not be downloaded
   322 : The requested package may not be 0 bytes in size.
   323 : The connection to the authorisation server could not be established
   331 : The package could not be downloaded
   333 : Could not set authorization token {0}
   334 : Cannot access service. Please verify your internet connection. {0}
   399 : Incorrect proxy configuration field
   400 : Unknown method
   401 : Error in the application
   402 : A file with a special template could not be found
   403 : Installation failed
   501 : Illegal bool Literal
   502 : The application returned an error code.
   503 : Did not succeed in extracting the file to the directory.
   504 : The file has an invalid signature.
   600 : PARSER error
   601 : Incorrectly formatted date. Expected: yyyy-mm-dd
   602 : Unknown PCIIDLISTE
   603 : The parameter is 'zero' or blank.
   604 : Unsupported registration key
   605 : Variable is 'zero' or blank
   606 : The package cannot be 'zero' for this condition.
   700 : The system information could not be read
   701 : Hardware scanner could not be executed.
   702 : Unsupported registration type
   703 : The Windows release ID could not be read
   704 : Unknown registry root
   705 : Unknown registration view
   800 : Installation thread has already been started
   801 : More than one installation program instance has been created.
   802 : An element was added to the queue after installation was completed.
   803 : The system is running on battery. Please connect the system to a power
supply unit or use the --ibat flag.
   804 : The file has a signature which is not supported.
   900 : DUCMD cannot be started from a root directory. Insert it in a subdirect
ory please.
   901 : Application folder could not be read
   902 : Sppwd requires an argument
   903 : Unknown command line option
   904 : Insufficient rights to access the directory
   905 : No such directory
   906 : This is NOT a directory.
   907 : Directory access failure
   908 : There is no such file.
   909 : This option can only be set once.
   910 : This option requires an additional parameter.
   911 : Missing option
  2000 : Invalid package ID
  2002 : Error in the processing of the configuration file
  2003 : No file found
  2004 : No database found
  2008 : The installation has been aborted.
  9099 : Internal error

After enabling SSL Inspection on my firewall I can see that Fujitsu is giving my DeskUpdate download requests a status code of 420 “Enhance your calm”, which is a deprecated status code used by early versions of Twitter and means “too many requests”.