Seite 1 von 2

[GELÖST] DELL BIOS-Setup-Paket

Veröffentlicht: 17. Dez. 2019 - 15:35 Uhr
von Seb B
Hallo zusammen,

Ich versuche, mit dem cctk-Tool von DELL ein Konfigurationspaket für das UEFI-BIOS zu erstellen.
Manche Computer sind durch ein BIOS-Passwort geschützt, andere nicht. Da wir nicht möchten, dass BIOS-Passwörter im Klartext übertragen werden, habe ich mit CCT zwei ausführbare Dateien erstellt: eine zum Entfernen des Passworts und eine zum Zurücksetzen.

Ich möchte in meinem WAPT-Paket folgende Schritte befolgen:
  • Prüfen Sie, ob ein Passwort festgelegt ist
  • Falls ja, führen Sie die ausführbare Datei aus, die es löscht
  • Die vorgegebenen Änderungen vornehmen
  • Starten Sie die ausführbare Datei, die das Passwort zurücksetzt
Die einzige Möglichkeit, die ich gefunden habe, um zu überprüfen, ob ein Passwort gesetzt ist, besteht darin, in cctk mit einem falschen Passwort einen Fehler zu verursachen; dann erhalte ich einen Rückgabecode, der mir mitteilt, ob ein Passwort gesetzt ist oder nicht.
Mein Problem ist, dass ich diesen Rückgabecode nicht erfassen kann.

Wenn ich meine Bestellung aufgebe:

Code: Alle auswählen

run (r'"C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" --numlock=enabled --valsetuppwd=impossiblepasswd'")
Ich habe eine CalledProcessErrorOutput-Methode (normal), die diesen Rückgabecode anzeigt

Code: Alle auswählen

Traceback (most recent call last):
  File "C:\Program Files (x86)\wapt\common.py", line 3851, in install_wapt
    exitstatus = setup.install()
  File "C:\waptdev\iut-dell-bios-configuration-wapt\setup.py", line 39, in install
    run (r'"C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" --numlock=enabled --valsetuppwd=impossiblepasswd', return_stderr=errlist, accept_returncodes=[0,3])
  File "C:\Program Files (x86)\wapt\common.py", line 3630, in run
    return ensure_unicode(setuphelpers.run(*arg,pidlist=self.pidlist,**args))
  File "C:\Program Files (x86)\wapt\setuphelpers.py", line 1066, in run
    raise CalledProcessErrorOutput(proc.returncode,cmd,''.join(output+return_stderr))
CalledProcessErrorOutput: Command '"C:\\Program Files (x86)\\Dell\\Command Configure\\X86_64\\cctk.exe" --numlock=enabled --valsetuppwd=impossiblepasswd' returned non-zero exit status 58.
Output:
The setup password provided is incorrect. Please try again.
Ich möchte diesen Exit-Code (in meinem Fall 58 und 106) abrufen können, um meine erste Bedingung überprüfen zu können.

Ich habe versucht, den Rückgabewert des Befehls in einem try/except-Block abzufangen. In PyScripter funktioniert das einwandfrei, aber auf den Clients lässt sich damit kein Paket starten.

Code: Alle auswählen

# -*- coding: utf-8 -*-
from setuphelpers import *
import subprocess

uninstallkey = []


def ispwddefined():

    try:
        print (subprocess.check_output(["C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe", "--numlock=enabled", "--valsetuppwd=impossiblepasswd "]).decode())
    except subprocess.CalledProcessError, e:
        cctkerrorcode = e.returncode
        print cctkerrorcode

    if (cctkerrorcode == 58):
        print "password configured"
        return True;
    elif(cctkerrorcode == 106):
        print ("no password configured")
        return False


def install():

    print ispwddefined()
    
In der PyScripter-Umgebung wird beim Starten der Ausführungskonfiguration "install" der Wert True oder False sowie der entsprechende Rückgabecode korrekt angezeigt.

Code: Alle auswählen

Ligne de Commande : install "C:\waptdev\iut-dell-bios-configuration-wapt\WAPT\.."
Using config file: C:\Program Files (x86)\wapt\wapt-get.ini
Installing WAPT files C:\waptdev\iut-dell-bios-configuration-wapt
58
password configured
True
Sobald das Paket im Repository vorhanden und auf einem Testrechner bereitgestellt ist, erhalte ich folgende Fehlermeldung:

Code: Alle auswählen

UnboundLocalError: local variable 'cctkerrorcode' referenced before assignment
Ich habe versucht, die Variable cctkerrorcode am Anfang der Funktion ispwddefined() zu definieren, und hier ist etwas noch Merkwürdigeres: Das Paket wird erfolgreich installiert, und das Ergebnis lautet:

Code: Alle auswählen

NumLock=Enabled

None
Ich habe den Eindruck, dass er in diesem Fall den cctk-Fehler nicht sieht...

Ich muss zugeben, dass ich langsam nicht mehr das umsetze, was ich eigentlich kann...

Weiß jemand, wie man Rückgabecodes auf einfachere Weise erfassen kann?

Vielen Dank im Voraus für Ihre Hilfe.

Seb.

Betreff: DELL BIOS-Setup-Paket

Veröffentlicht: 17. Dez. 2019 - 15:46 Uhr
von Seb B
Hallo nochmal,

Ich gieße Öl ins Feuer und entschuldige mich im Voraus...

Ich habe es gerade getestet, indem ich den Befehl ausgeführt habe, der einen Fehler auslösen sollte. Dabei habe ich angegeben, dass er den Rückgabecode 58 akzeptieren soll (ein Passwort ist definiert, Sie haben aber nicht das richtige angegeben). Es gab jedoch keinen Fehler. Der Rückgabecode, den ich abrufen möchte, wird tatsächlich vom Befehl „run“ zurückgegeben. Kann man diesen Code (einfach) in einer Variablen speichern?

Code: Alle auswählen

run (r'"C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" --numlock=enabled --valsetuppwd=impossiblepasswd', accept_returncodes=[0,58])

Betreff: DELL BIOS-Setup-Paket

Veröffentlicht: 17. Dez. 2019 - 15:54 Uhr
von htouvet
Der Befehl `run` gibt eine leicht angereicherte Zeichenkette zurück...
Das Attribut „returncode“ gibt den Rückgabecode an.

Code: Alle auswählen

result = run (r'"C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" --numlock=enabled --valsetuppwd=impossiblepasswd'")
if result.returncode == 58:
    print('Probleme mot de passe')

Betreff: DELL BIOS-Setup-Paket

Veröffentlicht: 17. Dez. 2019 - 16:12 Uhr
von Seb B
DANKE!

Leider scheint das Ergebnis von `run` kein Objekt, sondern Unicode zu sein (ich gebe zu, ich bin mir meiner Terminologie nicht ganz sicher) :Hoppla: ).

Code: Alle auswählen

AttributeError: 'unicode' object has no attribute 'returncode'
Ich habe versucht, den Befehl „run“ direkt auszugeben, mit genau demselben Ergebnis.

Code: Alle auswählen

print (run (r'"C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" --numlock=enabled --valsetuppwd=impossiblepasswd', accept_returncodes=[0,58]).returncode)

Betreff: DELL BIOS-Setup-Paket

Veröffentlicht: 17. Dez. 2019 - 19:04 Uhr
von htouvet
Mit wapt 1.7.4 ist es Unicode angereichert mit dem Attribut...
Welche Version haben Sie?

Betreff: DELL BIOS-Setup-Paket

Veröffentlicht: 18. Dez. 2019 - 08:10 Uhr
von Seb B
Hallo,

wir verwenden Version 1.7.4.6229.

Betreff: DELL BIOS-Setup-Paket

Veröffentlicht: 18. Dez. 2019 - 09:32 Uhr
von htouvet
Ich sehe das Problem...
Der Befehl `run` in der Wapt-Klasse (der in der `install`-Funktion des Pakets verfügbar ist) wurde so geändert, dass er Unicode zurückgibt (aus undurchsichtigen Gründen der Abwärtskompatibilität)
Der Befehl setuphelpers.run gibt jedoch entweder Unicode oder Bytes (rohe Zeichenkettenausgabe des gestarteten Befehls) mit dem Attribut returncode zurück, je nachdem, ob der gestartete Befehl in Unicode oder Bytes vorliegt.

https://github.com/tranquilit/WAPT/blob ... rs.py#L949

https://github.com/tranquilit/WAPT/blob ... s.py#L1075

In Ihrem Fall sollten Sie daher die direkte Ausführungsfunktion von setuphelpers verwenden:

Code: Alle auswählen

import setuphelpers

def install():
    result = setuphelpers.run (r'"C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" --numlock=enabled --valsetuppwd=impossiblepasswd'")
    if result.returncode == 58:
        print('Probleme mot de passe')

Betreff: DELL BIOS-Setup-Paket

Veröffentlicht: 18. Dez. 2019 - 10:07 Uhr
von Seb B
Super!

Es funktioniert, vielen Dank!
Jetzt muss ich nur noch den Rest des Pakets bearbeiten.

Nochmals vielen Dank!

Betreff: [GELÖST] DELL BIOS-Konfigurationspaket

Veröffentlicht: 29. November 2023 – 16:21 Uhr
von den Gälen
Guten Morgen,
Ich versuche dasselbe wie „Seb b“, kann aber den Rückgabewert nicht mit `result.returncode` abrufen. Ich vermute, die Installation stürzt beim ersten Start mit den unten stehenden Fehlern ab. Wenn das eingegebene Passwort mit dem BIOS-Passwort übereinstimmt, zeigt das Skript „Rückgabewert = 0“ an.
Dell BIOS-Setup mit
Fehler bei der Installation von ['dst-Bios_DELL_Update-wapt']: Fehler in Paketen [[PackageRequest(package='dst-Bios_DELL_Update-wapt',architectures=['x64'],locales=['fr'],maturities=['PROD', 'DEV'],tags=['windows-10', 'win-10', 'w-10', 'windows10', 'win10', 'w10', 'windows', 'win', 'w'], min_os_version=Version('10.0.22621'), max_os_version=Version('10.0.22621')), PackageEntry('dst-Bios_DELL_Update-wapt','1.0.0-62' maturity='DEV'), 'Traceback (most recent call last):\n Datei "C:\\Program Files (x86)\\wapt\\common.py", Zeile 5192, in install\n result = self.install_wapt(p.localpath,\n Datei "C:\\Program Files (x86)\\wapt\\common.py", Zeile 4176, in install_wapt\n raise e\n Datei "C:\\Program Files (x86)\\wapt\\common.py", Zeile 4083, in install_wapt\n exitstatus = setup.install()\n Datei "C:\\Windows\\TEMP\\waptpzh4plq3\\setup.py", Zeile 16, in install\n Datei "C:\\Program Files (x86)\\wapt\\common.py", Zeile 3860, in run\n return ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n Datei "C:\\Program Files (x86)\\wapt\\waptutils.py", Zeile 2118, in run\n raise CalledProcessErrorOutput(proc.returncode, cmd, \'\'.join(output))\nwaptutils.CalledProcessErrorOutput: Der Befehl \'"C:\\\\Program Files (x86)\\\\Dell\\\\Command Configure\\\\X86_64\\\\cctk.exe" -i cctk.ini --valsetuppwd=password -lc:\\\\dell_cctk.log\' hat den Exit-Status 58 zurückgegeben.\nAusgabe:CCTKAppEngVer=4.10.1.11\r\n\r\nDas angegebene Setup-Passwort ist falsch. Bitte versuchen Sie es erneut.\r\n\n']]
Traceback (letzter Aufruf):
Datei "C:\Program Files (x86)\wapt\waptservice\service.py", Zeile 1910, in run
self.running_task.run()
Datei "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", Zeile 716, in run
self._run()
Datei "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", Zeile 1288, in _run
raise Exception(_('Fehler bei der Installation von {}: Fehler in Paketen {}').format(
Ausnahme: Fehler bei der Installation von ['dst-Bios_DELL_Update-wapt']: Fehler in Paketen [[PackageRequest(package='dst-Bios_DELL_Update-wapt',architectures=['x64'],locales=['fr'],maturities=['PROD', 'DEV'],tags=['windows-10', 'win-10', 'w-10', 'windows10', 'win10', 'w10', 'windows', 'win', 'w'],min_os_version=Version('10.0.22621'),max_os_version=Version('10.0.22621')), PackageEntry('dst-Bios_DELL_Update-wapt','1.0.0-62' maturity='DEV'), 'Traceback (most recent call last):\n File "C:\\Program Files (x86)\wapt\common.py", line 5192, in install\n result = self.install_wapt(p.localpath,\n File "C:\\Program Files (x86)\\wapt\\common.py", line 4176, in install_wapt\n raise e\n Datei "C:\\Program Files (x86)\\wapt\\common.py", Zeile 4083, in install_wapt\n exitstatus = setup.install()\n Datei "C:\\Windows\\TEMP\\waptpzh4plq3\\setup.py", Zeile 16, in install\n Datei "C:\\Program Files (x86)\\wapt\\common.py", Zeile 3860, in run\n return ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n Datei "C:\\Program Files (x86)\\wapt\\waptutils.py", Zeile 2118, in run\n raise CalledProcessErrorOutput(proc.returncode, cmd, \'\'.join(output))\nwaptutils.CalledProcessErrorOutput: Der Befehl \'"C:\\\\Program Files (x86)\\\\Dell\\\\Command Configure\\\\X86_64\\\\cctk.exe" -i cctk.ini --valsetuppwd=password -lc:\\\\dell_cctk.log\' hat den Exit-Status 58 zurückgegeben.\nOutput:CCTKAppEngVer=4.10.1.11\r\n\r\nDas angegebene Setup-Passwort ist falsch. Bitte versuchen Sie es erneut.\r\n\n']]

Ausnahme: Fehler bei der Installation von ['dst-Bios_DELL_Update-wapt']: Fehler in Paketen [[PackageRequest(package='dst-Bios_DELL_Update-wapt',architectures=['x64'],locales=['fr'],maturities=['PROD', 'DEV'],tags=['windows-10', 'win-10', 'w-10', 'windows10', 'win10', 'w10', 'windows', 'win', 'w'], min_os_version=Version('10.0.22621'), max_os_version=Version('10.0.22621')), PackageEntry('dst-Bios_DELL_Update-wapt','1.0.0-62' maturity='DEV'), 'Traceback (most recent call last):\n File "C:\\Program Files (x86)\\wapt\\common.py", line 5192, in install\n result = self.install_wapt(p.localpath,\n Datei "C:\\Program Files (x86)\wapt\common.py", Zeile 4176, in install_wapt\n raise e\n Datei "C:\\Program Files (x86)\\wapt\\common.py", Zeile 4083, in install_wapt\n exitstatus = setup.install()\n Datei "C:\\Windows\\TEMP\\waptpzh4plq3\\setup.py", Zeile 16, in install\n Datei "C:\\Program Files (x86)\\wapt\\common.py", Zeile 3860, in run\n return ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n Datei "C:\\Program Files (x86)\\wapt\\waptutils.py", Zeile 2118, in run\n raise CalledProcessErrorOutput(proc.returncode, cmd, \'\'.join(output))\nwaptutils.CalledProcessErrorOutput: Der Befehl \'"C:\\\\Program Files (x86)\\\\Dell\\\\Command Configure\\\\X86_64\\\\cctk.exe" -i cctk.ini --valsetuppwd=password -lc:\\\\dell_cctk.log\' hat den Exit-Status 58 zurückgegeben.\nAusgabe:CCTKAppEngVer=4.10.1.11\r\n\r\nDas angegebene Setup-Passwort ist falsch. Bitte versuchen Sie es erneut.\r\n\n']]
Traceback (letzter Aufruf):
Datei "C:\Program Files (x86)\wapt\waptservice\service.py", Zeile 1910, in run
self.running_task.run()
Datei "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", Zeile 716, in run
self._run()
Datei "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", Zeile 1288, in _run
raise Exception(_('Fehler bei der Installation von {}: Fehler in Paketen {}').format(
Ausnahme: Fehler bei der Installation von ['dst-Bios_DELL_Update-wapt']: Fehler in Paketen [[PackageRequest(package='dst-Bios_DELL_Update-wapt',architectures=['x64'],locales=['fr'],maturities=['PROD', 'DEV'],tags=['windows-10', 'win-10', 'w-10', 'windows10', 'win10', 'w10', 'windows', 'win', 'w'],min_os_version=Version('10.0.22621'),max_os_version=Version('10.0.22621')), PackageEntry('dst-Bios_DELL_Update-wapt','1.0.0-62' maturity='DEV'), 'Traceback (most recent call last):\n File "C:\\Program Files (x86)\\wapt\\common.py", line 5192, in install\n result = self.install_wapt(p.localpath,\n File "C:\\Program Files (x86)\\wapt\\common.py", line 4176, in install_wapt\n raise e\n File "C:\\Program Files (x86)\\wapt\\common.py", Zeile 4083, in install_wapt\n exitstatus = setup.install()\n Datei "C:\\Windows\\TEMP\\waptpzh4plq3\\setup.py", Zeile 16, in install\n Datei "C:\\Program Files (x86)\\wapt\\common.py", Zeile 3860, in run\n return ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n Datei "C:\\Program Files (x86)\\wapt\\waptutils.py", Zeile 2118, in run\n raise CalledProcessErrorOutput(proc.returncode, cmd, \'\'.join(output))\nwaptutils.CalledProcessErrorOutput: Befehl \'"C:\\\\Program Files (x86)\\\\Dell\\\\Command Der Befehl "Configure\\\\X86_64\\\\cctk.exe" -i cctk.ini --valsetuppwd=password -lc:\\\\dell_cctk.log\" lieferte den Exit-Status 58 zurück.\nAusgabe:CCTKAppEngVer=4.10.1.11\r\n\r\nDas angegebene Setup-Passwort ist falsch. Bitte versuchen Sie es erneut.

Code: Alle auswählen

# -*- coding: utf-8 -*-
from setuphelpers import *
uninstallkey = []
cctk_binaries = makepath(programfiles32,'Dell','Command Configure','X86_64','cctk.exe')

def install():
    import wmi
    c = wmi.WMI()
    for computersystem in c.Win32_ComputerSystem():
        if(computersystem.Manufacturer == "Dell Inc."):
            if(isfile(cctk_binaries)):
                print(r'Configuration BIOS Dell avec pass')
                result = run (r'"%s" -i cctk.ini --valsetuppwd=password -l c:\dell_cctk.log' %cctk_binaries)
                print(f"Code retour = {result.returncode}.")
                if result.returncode == 58:
                    print(r"Le mot de passe BIOS n'est pas le pass habituel !")
                if result.returncode == 106:
                    print(r"Le mot de passe BIOS est vide, tentative d'ajout du mot de passe")
                    run (r'"%s" -i cctk.ini --setuppwd=password  ' %cctk_binaries)
                    print(r'Configuration BIOS Dell avec pass')
                    run (r'"%s" -i cctk.ini --valsetuppwd=password  -l c:\dell_cctk.log' %cctk_binaries)
                else:
                    print(r"Resultat de la config CCTK ok")

Betreff: [GELÖST] DELL BIOS-Konfigurationspaket

Veröffentlicht: 29. November 2023 – 22:45 Uhr
von Sfonteneau
Die Fehlermeldung in Ihrem Fall lautet: Das angegebene Setup-Passwort ist falsch. Bitte versuchen Sie es erneut mit dem Exit-Code 58

Wenn Sie also den Fehlercode 58 abfangen möchten, empfehle ich die Verwendung von accept_returncodes:

Code: Alle auswählen

result = run (r'"%s" -i cctk.ini --valsetuppwd=password -l c:\dell_cctk.log' %cctk_binaries,accept_returncodes=[0, 3010,58])
if result.returncode = 58:
    print(r"Le mot de passe de configuration fourni est incorrect")
oder um auf Fehler umzuschalten:

Code: Alle auswählen

result = run (r'"%s" -i cctk.ini --valsetuppwd=password -l c:\dell_cctk.log' %cctk_binaries,accept_returncodes=[0, 3010,58])
if result.returncode = 58:
    error(r"Le mot de passe de configuration fourni est incorrect")