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.
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 applicationComputer Product Identification:
Product . . . . : ESPRIMO_P556
Board . . . . . : D3400-A1
Operating system: W10 (AMD64)
Marketing name : ESPRIMO_P556Installable 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 0 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.