it-runs.de

Ducmd – Fujitsu DeskUpdate Powershell Skripte

Beitragsbild-Powershell

Beim letzten Beitrag über das Fujitsu DeskUpdate habe ich euch gezeigt, wie das in die baramundi Management Suite integriert werden kann. Natürlich ist es auch möglich dieses Wissen analog auf andere Produkte umzusetzen. Aus diesem Grund gehen wir hier noch mal die Powershell Skripte durch die benutzt werden um Ducmd.exe aufzurufen.

Ducmd - Hilfe
Ducmd – Hilfe

Powershell Skript – Prüfen auf Updates

Wir werden das ganze Abschnittsweise durchgehen, damit ihr eine bessere Übersicht bekommt.

 

Abschnitt 1: config values

# ---------------------------------------------------------------------------
# config values
# ---------------------------------------------------------------------------
param( 
    [Parameter(Mandatory=$true,
            Position=0,
            ParameterSetName="DeskUpdate Path",
            ValueFromPipeline=$true,
            ValueFromPipelineByPropertyName=$true,
            HelpMessage="Path to location of Ducmd.exe")]
    [Alias("PSPath")]
    [ValidateNotNullOrEmpty()]
    [string[]]
    $DeskUpdate
)

Hier wird definiert welche Parameter das Skript von außen erwartet. DeskUpdate ist als Parameter anzugeben. Dieser muss auf die Ducmd.exe zeigen. Im ersten Abschnitt wird nur überprüft, ob ihr diesen angebt und dieser nicht leer ist.

 

Abschnitt 2: Prüfen der Powershell Version

# ---------------------------------------------------------------------------
# main program starts here
# ---------------------------------------------------------------------------

# check for powershell version
if ($PSVersionTable.PSVersion.Major -lt 4) {
    Write-Error "Powershell Version 4 required"
    exit 9000
}

Die verwendeten Funktionen setzen eine Powershell Version von mindestens 4.0 voraus. Es wird also überprüft ob diese Version eingesetzt wird. Sollte die Version kleiner sein, wird eine Fehlermeldung ausgegeben und ein Returnwert von 9000 ausgegeben.

 

Abschnitt 3: Prüfen ob Ducmd.exe vorhanden ist

# check for Deskupdate
if (! (Test-Path $DeskUpdate) ) 
{
    Write-Error "Deskupdate not found"
    exit 9001
}

Im Abschnitt 1 wurde der DeskUpdate Pfad angegeben und hier überprüft ob Ducmd.exe dort vorhanden ist. Im Fehlerfall wird wieder eine Fehlermeldung ausgegeben und ein Returnwert von 9001 zurückgegeben.

Eine zusätzliche Überprüfung auf die Version lässt sich hier ebenfalls einbauen. Das Powershell Skript ist auf die Version 5.x ausgelegt. Ältere Versionen funktionieren unter Umständen nicht korrekt.

 

Abschnitt 4: Updates suchen – Ausführung erfolgreich

else
{
    # run Ducmd with parameters
    $content = (cmd /c $DeskUpdate' /WEB /LIST')
    
    # if success, next step
    if ($LASTEXITCODE -eq 0) 
    {
        # extract only installable packages
        $content = ($content.Where({$_ -like "Installable packages:"}, 'SkipUntil').Trim()) | Select-Object -Skip 1
        
        if ($content.Count -gt 0) {
            # return update available
            Write-Host "Update required $($content)"
            exit 9002
            
        } else {
            # return no update available
            Write-Host "no Update required $($content)"
            exit 9003
        }
    } else {
        # return code deskupdate
        Write-Error "Program terminated with errorcode $($LASTEXITCODE) - check Ducmd.exe /E for more information"
        exit $LASTEXITCODE
    }
}

Der letzte Abschnitt ist die eigentliche Ausführung des Programms Ducmd.exe. Die erzeugte Ausgabe des Programms wird in die Variable $content gespeichert, die später ausgewertet wird.

Beispiel $content

ducmd 5.00.8.0
Copyright (c) 2017 Fujitsu Technology Solutions
DeskUpdate command line application

Computer Product Identification:
Product . . . . : ESPRIMO_P556
Board . . . . . : D3400-A1
Operating system: W10 (AMD64)
Marketing name : ESPRIMO_P556

Installable packages:
[ID] 4051 – Realtek PCI-E NIC Family all in one NDIS Driver for Windows 10, [version] 10.026.0328.2018
[ID] 4203 – Intel® HD Graphics (KabyLake), [version] 100.6136 – 24.20.100.6136 – PV – 64bit
[ID] 3841 – Intel AHCI 16.0.2.1086 PV, [version] 16.0.2.1086 – PV
[ID] 4127 – FUJ02E3 Device Driver 4.0.2.6 (DCU), [version] 4.0.2.6
[ID] 4237 – Workplace PowerSettings 2.20.0039 (64), [version] 2.20.0039

Auch Ducmd.exe gibt einen Rückgabewert aus. Diesen prüfen wir im nächsten Schritt, nur wenn dieser Erfolgreich, also ist, überprüfen wir den Inhalt von $content. Die nächste Zeile such innerhalb der Variable nach der Zeile “Installable packages:”, verwirft alles bis dahin und gibt die übernächste Zeile, von Leerzeichen am Anfang und Ende bereinigt, aus.

Der einzige Inhalt sind jetzt die “[ID] …”-Einträge diese zählen wir und wenn diese größer als 0 sind, geben wir die Meldung aus “Update required $($content)”. Wird das Script lokal ausgeführt sieht man jetzt die offenen Updates. Gleichzeitig wird das Skript mit dem Returncode 9002 beendet.

Sollten keine “[ID] …”-Einträge vorhanden sein, so wird die Meldung ausgegeben “no Update required $($content)” und der Returncode 9003.

 

Abschnitt 5: Updates suchen – Ausführung fehlgeschlagen

    } else {
        # return code deskupdate
        Write-Error "Program terminated with errorcode $($LASTEXITCODE) - check Ducmd.exe /E for more information"
        exit $LASTEXITCODE
    }

Sollte Ducmd.exe als Rückgabewert keine 0 ausgegeben haben, so wird am Schluss eine Fehlermeldung “Program terminated with errorcode $($LASTEXITCODE) – check Ducmd.exe /E for more information” ausgegeben und als Rückgabewert der Wert den uns Ducmd.exe gegeben hat.

Powershell Skript – Updates installieren

Abschnitt 1: config values

# ---------------------------------------------------------------------------
# config values
# ---------------------------------------------------------------------------
param( 
    [Parameter(Mandatory=$true,
            Position=0,
            ParameterSetName="DeskUpdate Path",
            ValueFromPipeline=$true,
            ValueFromPipelineByPropertyName=$true,
            HelpMessage="Path to location of Ducmd.exe")]
    [Alias("PSPath")]
    [ValidateNotNullOrEmpty()]
    [string[]]
    $DeskUpdate
)

Hier wird definiert welche Parameter das Skript von außen erwartet. DeskUpdate ist als Parameter anzugeben. Dieser muss auf die Ducmd.exe zeigen. Im ersten Abschnitt wird nur überprüft, ob ihr diesen angebt und dieser nicht leer ist.

 

Abschnitt 2: Prüfen ob Ducmd.exe vorhanden ist

# check for Deskupdate
if (! (Test-Path $DeskUpdate) ) 
{
    Write-Error "Deskupdate not found"
    exit 9001
}

Sollte Ducmd.exe nicht vorhanden sein oder kein Zugriff darauf möglich sein, so wird eine Fehlermeldung ausgegeben und der Rückgabewert 9001.

 

Abschnitt 3: Updates installieren

else
{
    # run Ducmd with parameters
    $content = (cmd /c $DeskUpdate' /INSTALL /WEB /X')
    
    exit $LASTEXITCODE
}

Die Installation wird gestartet und innerhalb der Variable $content gespeichert. Diese kann später auch weiter ausgewertet werden. Diese enthält die Information über den Download und die Installation. Der Inhalt könnte zum Beispiel wie folgt aussehen:

Beispiel $content

ducmd 5.00.8.0
Copyright (c) 2017 Fujitsu Technology Solutions
DeskUpdate command line application

Computer Product Identification:
Product . . . . : ESPRIMO P420
Board . . . . . : D3230-A1
Operating system: W7 (AMD64)
Marketing name : ESPRIMO P420

Creating a system restore point
Package 0/6 downloaded
Package 1/6 downloaded
Package 2/6 downloaded
Package 3/6 downloaded
Package 4/6 downloaded
Package 5/6 downloaded
Package 6/6 downloaded
Package 1/6 installed
Package 2/6 installed
Package 3/6 installed
Package 4/6 installed
Package 5/6 installed
Installation finished

DeskUpdate requires a reboot to activate changes!!!

Der Rückgabewert wird direkt durchgereicht. Eine genauere Auswertung wäre möglich, in den meisten Fällen reicht aber der Rückgabewert.

Auf der nächsten Seite werden wir uns die Rückgabewerte von Ducmd anschauen.

Rückgabewerte von Ducmd

ducmd 5.00.8.0
Copyright (c) 2017 Fujitsu Technology Solutions
DeskUpdate command line application

ducmd Version 5.00.8.0
Copyright (c) 2017 Fujitsu Technology Solutions

DeskUpdate command line application

Program exit codes:

    0	Success. (no reboot required, if /x is provided, see ERRORLEVEL 300)
    1	Syntax error in command line.
    3	Configuration file "DuCore.config.json" not found.
    4	Unsupported operating system.
    5	System not supported.
    6	DeskUpdate or DuCmd already running.
    7	General error.
   10	Error while installing Windows Update.
   20	Error while installing driver.
   22	DeskUpdate requires administrator rights.
   30	Error while installing application.
   40	Install error, see output for details.
   50	Wrong package ID(s) or BIOS package. Use '/LIST' to get the package ID(s).
   99	Unexpected exception.
  100	No internet connection available.
  110	No connection to web service.
  120	Web service currently not enabled. Please retry later.
  130	System not supported by DeskUpdate Web.
  140	Download of main catalog file not possible. Please retry later.
  150	The DeskUpdate version is out of date. Set SelfUpdateAllowed to true in DuCore.config.json 
        or add /AU parameter to allow update of DUCMD.exe.
  151	DUCMD.exe started a self-update.
  155	The DeskUpdate version was out of date. Update of DUCMD.exe was successful.
  157	The DeskUpdate version is out of date. Update of DUCMD.exe failed.
  160	Web update disabled. Please enable in CONFIG.ini (WEBUPDATE="1").
  161	Web update only works with systems from Fujitsu.
  170	Download denied due to legal requirements.
  171	Operating system prerequisite missing (e.g. hotfix).
  200	Canceled action by CTRL event.
  300	Success. Reboot required. (Note: parameter /x was used)
 1025	The remaining battery capacity is too low. Please charge the battery or add /IBAT parameter to ignore the battery capacity.

Anhand dieser Rückgabewerte lassen sich alle Eventualitäten abfangen. Dieses kann durch den Einsatz von Powershell sein. Oder in dem nachgelagerten Programm umgesetzt werden.


Konfiguration von Ducmd

Um die Treiber, Software und eventuelle Windows Updates herunterladen zu können, muss Fujitsu DeskUpdate sich mit dem Internet verbinden. Das geschieht in fast allen Unternehmen durch einen Proxy. Alle benötigten Informationen müssen in der Datei DuCore.config.json eingetragen werden.

"Proxy": {
        "ProxyType" : 1,
        "_Comment_ProxyType0" : "0 = ProxyNone",
        "_Comment_ProxyType1" : "1 = ProxyAuto (default)",
        "_Comment_ProxyType2" : "2 = ProxyExplicit (uses ProxyUsername, ProxyPassword, ProxyServer)",
        "_Comment_ProxyType3" : "3 = ProxyAutoConfigUrl (uses ProxyAutoconfigUrl)",
        "_Comment_ProxyType4" : "4 = ProxyDefault",
        "_Comment_ProxyType5" : "5 = ProxyDefaultIe",
        "ProxyUsername" : "proxy1",
        "ProxyPassword" : "proxy2",
        "ProxyAutoconfigUrl" : "",
        "ProxyServer" : "192.168.168.207:808"
    },

Die Einträge sind selbsterklärend und in allen Fällen wird eine https Verbindung zu der folgenden URL aufgebaut https://webdownloads.ts.fujitsu.com/DeskUpdate5Ducmd verwendet eine Art von Public-Key-Pinning, solltet ihr also den https-Traffic scannen, muss eine Ausnahme definiert werden.

Innerhalb dieser Datei ist es auch möglich den System-Wiederherstellungspunkt SystemRestore zu deaktivieren. Dieser wird automatisch angelegt sobald eine Installation statt findet. Zu finden im ersten Abschnitt unter Config.

    "Config": {
        "WebUpdateAllowed"     : true,
        "SystemRestore" : true,
        "Repository" : "..\\html\\json",
        "FtsDeskUpdateServerUri": "https://webdownloads.ts.fujitsu.com/DeskUpdate5"
        "PackageRoot" : "..\\",
    },

Auf der letzten Seite findet ihr die Skripte und die Links zum Fujitsu DeskUpdate.

Links

Downloads

Download “Powershell - Fujitsu DeskUpdate Check” FujitsuDeskupdate-CheckerV5 1.4.zip – 2835-mal heruntergeladen – 1,21 kB Download “Powershell - Fujitsu DeskUpdate Installer” FujitsuDeskupdate-InstallerV5 1.4.zip – 2784-mal heruntergeladen – 947,00 B
Die mobile Version verlassen