[RISOLTO] Pacchetto di installazione del BIOS DELL

Domande sul packaging WAPT / Richieste e assistenza sui pacchetti Wapt.
Regole del forum
Regole del forum della community
* Supporto in inglese su www.reddit.com/r/wapt
* Supporto della community in francese disponibile su questo forum
* Si prega di anteporre [RISOLTO] al titolo dell'argomento se è stato risolto.
* Si prega di non modificare un argomento contrassegnato con [RISOLTO]. Aprire un nuovo argomento facendo riferimento a quello precedente.
* Specificare la versione di WAPT installata, la versione completa e il numero di build (2.2.1.11957 / 2.2.2.12337 / ecc.) nonché l'edizione Enterprise/Discovery.
* Le versioni 1.8.2 e precedenti non sono più supportate. Le uniche domande accettate relative alla versione 1.8.2 riguardano l'aggiornamento a una versione supportata (2.1, 2.2, ecc.).
* Specificare il sistema operativo del server (Linux/Windows) e la versione (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Specificare il sistema operativo della macchina di amministrazione/creazione dei pacchetti e della macchina con l'agente problematico, se applicabile (Windows 7/10/11/Debian 11/ecc.).
* Evitare di porre più domande quando si apre una discussione, altrimenti potrebbe essere ignorata. Se ci sono più discussioni, aprirle separatamente, preferibilmente una dopo l'altra e non tutte contemporaneamente (ovvero, non intasare il forum).
* Includere frammenti di codice, screenshot e altre immagini direttamente nel post. I link a Pastebin, Bitly e altri siti di terze parti verranno sistematicamente rimossi.
* Come in qualsiasi forum della community, il supporto è fornito volontariamente dai membri. Se si necessita di supporto commerciale, è possibile contattare il reparto vendite di Tranquil IT al numero 02.40.97.57.55
seb b
Messaggi: 23
Registrazione: 26 ottobre 2017 - 15:12

17 dicembre 2019 - 15:35

Ciao a tutti,

Sto cercando di creare un pacchetto di configurazione per il BIOS UEFI DELL utilizzando il loro strumento cctk.
Alcuni computer hanno una password del BIOS, altri no. Inoltre, non vogliamo che le password del BIOS vengano trasmesse in chiaro, quindi ho generato degli eseguibili usando CCT, uno che rimuove la password e uno che la reimposta.

Vorrei seguire questi passaggi nel mio pacchetto WAPT:
  • Controlla se la password è impostata
  • In tal caso, eseguire l'eseguibile che lo elimina
  • apportare le modifiche programmate
  • avviare l'eseguibile che reimposta la password
L'unico modo che ho trovato per verificare se la password è impostata è quello di causare un errore in cctk con una password errata; in questo modo mi viene restituito un codice che mi dice se la password è impostata o meno.
Il mio problema è che non riesco a catturare questo codice di ritorno.

Quando effettuo il mio ordine:

Codice: Seleziona tutto

run (r'"C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" --numlock=enabled --valsetuppwd=impossiblepasswd'")
Ho un CalledProcessErrorOutput (normale) che visualizza questo codice di ritorno

Codice: Seleziona tutto

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.
Vorrei poter recuperare questo codice di uscita (58 e 106 nel mio caso specifico) per poter verificare la mia prima condizione.

Ho provato a usare try/except sul comando per catturare il codice di ritorno; funziona benissimo in pyscripter, ma è impossibile avviare un pacchetto sui client.

Codice: Seleziona tutto

# -*- 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()
    
Nell'ambiente PyScripter, l'avvio della configurazione di esecuzione "install" visualizza correttamente il valore True o False, nonché il codice di ritorno pertinente.

Codice: Seleziona tutto

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
Una volta che il pacchetto è nel repository e distribuito su una macchina di prova, ricevo questo errore:

Codice: Seleziona tutto

UnboundLocalError: local variable 'cctkerrorcode' referenced before assignment
Ho provato a definire la variabile cctkerrorcode all'inizio della funzione ispwddefined(), ed ecco qualcosa di ancora più curioso: il pacchetto ha avuto successo e il risultato è:

Codice: Seleziona tutto

NumLock=Enabled

None
Ho l'impressione che in questo caso non veda l'errore cctk...

Devo ammettere che sto iniziando a non essere più all'altezza di ciò che so fare...

Qualcuno sa come catturare i codici di ritorno in un modo più elementare?

Grazie in anticipo per il vostro aiuto.

Seb.
seb b
Messaggi: 23
Registrazione: 26 ottobre 2017 - 15:12

17 dicembre 2019 - 15:46

Ciao di nuovo,

Sto gettando benzina sul fuoco e mi scuso in anticipo...

L'ho appena testato eseguendo il comando che dovrebbe generare un errore, specificando che avrebbe dovuto accettare il codice di ritorno 58 (è definita una password, non hai fornito quella corretta), e non si è verificato alcun errore. Il codice di ritorno che sto cercando di recuperare viene effettivamente restituito al comando "run". È possibile recuperare questo codice (facilmente) in una variabile?

Codice: Seleziona tutto

run (r'"C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" --numlock=enabled --valsetuppwd=impossiblepasswd', accept_returncodes=[0,58])
Avatar utente
htouvet
Esperto WAPT
Messaggi: 436
Registrazione: 16 marzo 2015 - 10:48
Contatto:

17 dicembre 2019 - 15:54

Il comando `run` restituisce una stringa leggermente arricchita...
un attributo returncode fornisce il codice di ritorno.

Codice: Seleziona tutto

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')
seb b
Messaggi: 23
Registrazione: 26 ottobre 2017 - 15:12

17 dicembre 2019 - 16:12

GRAZIE!

Purtroppo, sembra che il risultato di `run` non sia un oggetto ma Unicode (non sono sicuro della mia terminologia, lo ammetto) :oops: ).

Codice: Seleziona tutto

AttributeError: 'unicode' object has no attribute 'returncode'
Ho provato a stampare direttamente il comando run ottenendo esattamente lo stesso risultato.

Codice: Seleziona tutto

print (run (r'"C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" --numlock=enabled --valsetuppwd=impossiblepasswd', accept_returncodes=[0,58]).returncode)
Avatar utente
htouvet
Esperto WAPT
Messaggi: 436
Registrazione: 16 marzo 2015 - 10:48
Contatto:

17 dicembre 2019 - 19:04

Con wapt 1.7.4, è Unicode arricchito con l'attributo...
Che versione hai?
Tranquillo IT
seb b
Messaggi: 23
Registrazione: 26 ottobre 2017 - 15:12

18 dicembre 2019 - 8:10

Ciao,

siamo alla versione 1.7.4.6229.
Avatar utente
htouvet
Esperto WAPT
Messaggi: 436
Registrazione: 16 marzo 2015 - 10:48
Contatto:

18 dicembre 2019 - 09:32

Vedo il problema...
Il comando `run` nella classe Wapt (quello disponibile nella funzione `install` del pacchetto) è stato modificato per restituire Unicode (per oscuri motivi di compatibilità con le versioni precedenti)
Tuttavia, il comando setuphelpers.run restituisce Unicode o byte (output di stringa non elaborata dal comando avviato) con l'attributo returncode a seconda che il comando avviato sia in Unicode o in byte.

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

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

Nel tuo caso dovresti quindi utilizzare la funzione di esecuzione diretta di setuphelpers:

Codice: Seleziona tutto

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')
Tranquillo IT
seb b
Messaggi: 23
Registrazione: 26 ottobre 2017 - 15:12

18 dicembre 2019 - 10:07

Fantastico!

Funziona, grazie mille.
Ora devo solo completare il resto del pacchetto.

Grazie ancora!
Gaeldi
Messaggi: 254
Registrazione: 22 nov 2015 - 08:37

29 novembre 2023 - 16:21

Buongiorno,
Sto provando a fare la stessa cosa di "Seb b", ma non riesco a recuperare il codice di ritorno con `result.returncode`. Credo che l'installazione si blocchi al primo avvio con gli errori indicati di seguito. Quando la password fornita corrisponde alla password del BIOS, lo script visualizza "Return code = 0".
Configurazione BIOS Dell con password
Errore durante l'installazione di ['dst-Bios_DELL_Update-wapt']: errori nei pacchetti [[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", riga 5192, in install\n result = self.install_wapt(p.localpath,\n File "C:\\Program Files (x86)\\wapt\\common.py", riga 4176, in install_wapt\n raise e\n File "C:\\Program Files (x86)\\wapt\\common.py", riga 4083, in install_wapt\n exitstatus = setup.install()\n File "C:\\Windows\\TEMP\\waptpzh4plq3\\setup.py", riga 16, in install\n File "C:\\Program Files (x86)\\wapt\\common.py", riga 3860, in run\n return ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n File "C:\\Program Files (x86)\\wapt\\waptutils.py", riga 2118, in run\n raise CalledProcessErrorOutput(proc.returncode, cmd, \'\'.join(output))\nwaptutils.CalledProcessErrorOutput: il comando \'"C:\\\\Program Files (x86)\\\\Dell\\\\Command Configure\\\\X86_64\\\\cctk.exe" -i cctk.ini --valsetuppwd=password -lc:\\\\dell_cctk.log\' ha restituito uno stato di uscita diverso da zero 58.\nOutput:CCTKAppEngVer=4.10.1.11\r\n\r\nLa password di installazione fornita non è corretta. Riprova.\r\n\n']]
Traceback (chiamata più recente):
File "C:\Program Files (x86)\wapt\waptservice\service.py", riga 1910, in run
self.running_task.run()
File "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", riga 716, in run
self._run()
File "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", riga 1288, in _run
raise Exception(_('Errore durante l'installazione di {}: errori nei pacchetti {}').format(
Eccezione: Errore durante l'installazione di ['dst-Bios_DELL_Update-wapt']: errori nei pacchetti [[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", riga 4083, in install_wapt\n exitstatus = setup.install()\n File "C:\\Windows\\TEMP\\waptpzh4plq3\\setup.py", riga 16, in install\n File "C:\\Program Files (x86)\\wapt\\common.py", riga 3860, in run\n return ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n File "C:\\Program Files (x86)\\wapt\\waptutils.py", riga 2118, in run\n raise CalledProcessErrorOutput(proc.returncode, cmd, \'\'.join(output))\nwaptutils.CalledProcessErrorOutput: Comando \'"C:\\\\Program Files (x86)\\\\Dell\\\\Command Configure\\\\X86_64\\\\cctk.exe" -i cctk.ini --valsetuppwd=password -lc:\\\\dell_cctk.log\' ha restituito uno stato di uscita diverso da zero 58.\nOutput:CCTKAppEngVer=4.10.1.11\r\n\r\nLa password di installazione fornita non è corretta. Riprova.\r\n\n']]

Eccezione: Errore durante l'installazione di ['dst-Bios_DELL_Update-wapt']: errori nei pacchetti [[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", line 4083, in install_wapt\n exitstatus = setup.install()\n File "C:\\Windows\\TEMP\\waptpzh4plq3\\setup.py", riga 16, in install\n File "C:\\Program Files (x86)\\wapt\\common.py", riga 3860, in run\n return ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n File "C:\\Program Files (x86)\\wapt\\waptutils.py", riga 2118, in run\n raise CalledProcessErrorOutput(proc.returncode, cmd, \'\'.join(output))\nwaptutils.CalledProcessErrorOutput: Comando \'"C:\\\\Program Files (x86)\\\\Dell\\\\Command Configure\\\\X86_64\\\\cctk.exe" -i cctk.ini --valsetuppwd=password -lc:\\\\dell_cctk.log\' ha restituito uno stato di uscita diverso da zero 58.\nOutput:CCTKAppEngVer=4.10.1.11\r\n\r\nLa password di configurazione fornita non è corretta. Riprova.\r\n\n']]
Traceback (chiamata più recente):
File "C:\Program Files (x86)\wapt\waptservice\service.py", riga 1910, in run
self.running_task.run()
File "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", riga 716, in run
self._run()
File "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", riga 1288, in _run
raise Exception(_('Errore durante l'installazione di {}: errori nei pacchetti {}').format(
Eccezione: Errore durante l'installazione di ['dst-Bios_DELL_Update-wapt']: errori nei pacchetti [[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 (più recente ultima chiamata):\n File "C:\\Program Files (x86)\\wapt\\common.py", riga 5192, in install\n risultato = self.install_wapt(p.localpath,\n File "C:\\Program Files (x86)\\wapt\\common.py", riga 4176, in install_wapt\n genera e\n File "C:\\Program Files (x86)\\wapt\\common.py", riga 4083, in install_wapt\n exitstatus = setup.install()\n File "C:\\Windows\\TEMP\\waptpzh4plq3\\setup.py", riga 16, in install\n File "C:\\Program Files (x86)\\wapt\\common.py", riga 3860, in run\n restituisce ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n File "C:\\Program Files (x86)\\wapt\\waptutils.py", riga 2118, in run\n raise CalledProcessErrorOutput(proc.returncode, cmd, \'\'.join(output))\nwaptutils.CalledProcessErrorOutput: Il comando \'"C:\\\\Program Files (x86)\\\\Dell\\\\Command Configure\\\\X86_64\\\\cctk.exe" -i cctk.ini --valsetuppwd=password -lc:\\\\dell_cctk.log\' ha restituito uno stato di uscita diverso da zero 58.\nOutput:CCTKAppEngVer=4.10.1.11\r\n\r\nLa password di installazione fornita non è corretta. Riprova.

Codice: Seleziona tutto

# -*- 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")
Avatar utente
sfontenau
Esperto WAPT
Messaggi: 2312
Registrato: 10 luglio 2014 - 23:52
Contatto:

29 novembre 2023 - 22:45

Il messaggio nel tuo caso è: La password di configurazione fornita non è corretta. Riprova con il codice di uscita 58

Quindi, se vuoi intercettare il codice 58, ti consiglio di usare accept_returncodes:

Codice: Seleziona tutto

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")
o per impostarlo su errore:

Codice: Seleziona tutto

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")
Bloccato