[RESOLU] paquet de configuration des bios DELL

Questions about WAPT Packaging / Requêtes et aides autour des paquets Wapt.
Règles du forum
Règles du forum communautaire
* English support on www.reddit.com/r/wapt
* Le support communautaire en français se fait sur ce forum
* Merci de préfixer le titre du topic par [RESOLU] s'il est résolu.
* Merci de ne pas modifier un topic qui est taggé [RESOLU]. Ouvrez un nouveau topic en référençant l'ancien
* Préciser version de WAPT installée, version complète ET numéro de build (2.2.1.11957 / 2.2.2.12337 / etc.) AINSI QUE l'édition Enterprise / Discovery
* Les versions 1.8.2 et antérieures ne sont plus maintenues. Les seules questions acceptées vis à vis de la version 1.8.2 sont liés à la mise à jour vers une version supportée (2.1, 2.2, etc.)
* Préciser OS du serveur (Linux / Windows) et version (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019)
* Préciser OS de la machine d'administration/création des paquets et de la machine avec l'agent qui pose problème le cas échéant (Windows 7 / 10 / 11 / Debian 11 / etc.)
* Eviter de poser plusieurs questions lors de l'ouverture de topic, sinon il risque d'être ignorer. Si plusieurs sujet, ouvrir plusieurs topic, et de préférence les uns après les autres et pas tous en même temps (ie ne pas spammer le forum).
* Inclure directement les morceaux de code, les captures d'écran et autres images directement dans le post. Les liens vers les pastebin, les bitly et autres sites tierces seront systématiquement supprimés.
* Comme tout forum communautaire, le support est fait bénévolement par les membres. Si vous avez besoin d'un support commercial, vous pouvez contacter le service commercial Tranquil IT au 02.40.97.57.55
seb b
Messages : 23
Inscription : 26 oct. 2017 - 15:12

17 déc. 2019 - 15:35

Bonjour à tous,

je suis en train d'essayer de créer un paquet de configuration des BIOS UEFI DELL via leur outil cctk.
Certains postes ont un mot de passe de protection du BIOS, d'autres non. Bous ne voulons pas non plus que les mdp des BIOS circulent en clair, j'ai donc généré des executables via CCT, un qui supprime le mdp et un qui le remet.

Je voudrais dans mon paquet WAPT, suivre les étapes suivantes :
  • Vérifier si le mdp est défini
  • si oui lancer l'executbale qui le supprime
  • apporter les modifications scriptées
  • lancer l'executable qui redéfinit le mdp
Le seul moyen que j'ai trouvé pour vérifier si le mdp est défini consiste à provoquer une erreur dans cctk avec un mauvais mdp, il me donne alors un code de retour qui me dit si un mot de passe est défini ou non.
Mon problème est que je n'arrive pas à capturer ce code de retour.

Lorsque je lance ma commande :

Code : Tout sélectionner

run (r'"C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" --numlock=enabled --valsetuppwd=impossiblepasswd'")
J'ai un CalledProcessErrorOutput (normal) qui m'affiche ce code de retour

Code : Tout sélectionner

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.
Je voudrais pouvoir récupérer ce code de sortie (58 et 106 dans mon cas précis) pour pouvoir vérifier ma première condition.

j'ai essayé un try/except sur la commande pour capturer le returncode, ça fonctionne super dans pyscripter mais impossible de lancer un paquet sur les clients.

Code : Tout sélectionner

# -*- 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()
    
dans l'environnement PyScripter lancer la conf d'execution "install" m'affiche bien le True ou le False ainsi que le returncode concerné.

Code : Tout sélectionner

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
Une fois le paquet sur le dépôt et déployé sur un poste de test, j'ai cette erreur :

Code : Tout sélectionner

UnboundLocalError: local variable 'cctkerrorcode' referenced before assignment
J'ai essayé de définir la variable cctkerrorcode au début de la fonction ispwddefined() et là, c'est encore plus curieux, le paquet est en succès et le résultat est :

Code : Tout sélectionner

NumLock=Enabled

None
J'ai l'impression que dans ce cas là, il ne voit pas l'erreur cctk...

Je vous avoue que je commence à être loin de ce que je sais faire...

Est-ce que quelqu'un sait comment capturer les codes de retour d'une manière un peu plus basique?

Merci d'avance de votre aide.

Seb.
seb b
Messages : 23
Inscription : 26 oct. 2017 - 15:12

17 déc. 2019 - 15:46

Re bonjour,

j'en rajoute une couche, et je m'en excuse d'avance...

Je viens de tester en lançant la commande qui doit se mettre en erreur, en lui précisant d'accepter le code de retour 58 (un mot de passe est défini, vous n'avez pas fourni le bon), et là pas d'erreur, le code de retour que je cherche à récupérer est donc bien renvoyé à la commande 'run'. Est-il possible de récupérer ce code (facilement) dans une variable?

Code : Tout sélectionner

run (r'"C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" --numlock=enabled --valsetuppwd=impossiblepasswd', accept_returncodes=[0,58])
Avatar de l’utilisateur
htouvet
Expert WAPT
Messages : 402
Inscription : 16 mars 2015 - 10:48
Contact :

17 déc. 2019 - 15:54

la commande run retourne une chaine un peu enrichie...
un attribut returncode donne le code de retour.

Code : Tout sélectionner

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
Messages : 23
Inscription : 26 oct. 2017 - 15:12

17 déc. 2019 - 16:12

Merci!

malheureusement, on dirait que le résultat de run n'est pas un objet mais de l'unicode (je ne suis pas sûr de mes termes j'avoue :oops: ).

Code : Tout sélectionner

AttributeError: 'unicode' object has no attribute 'returncode'
j'ai essayé de faire directementun print de la commande run avec exactement le même résultat.

Code : Tout sélectionner

print (run (r'"C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" --numlock=enabled --valsetuppwd=impossiblepasswd', accept_returncodes=[0,58]).returncode)
Avatar de l’utilisateur
htouvet
Expert WAPT
Messages : 402
Inscription : 16 mars 2015 - 10:48
Contact :

17 déc. 2019 - 19:04

AVec wapt 1.7.4, c'est de l'unicode enrichi de l'attribut...
Quelle version avez-vous ?
Tranquil IT
seb b
Messages : 23
Inscription : 26 oct. 2017 - 15:12

18 déc. 2019 - 08:10

Bonjour,

nous sommes en 1.7.4.6229.
Avatar de l’utilisateur
htouvet
Expert WAPT
Messages : 402
Inscription : 16 mars 2015 - 10:48
Contact :

18 déc. 2019 - 09:32

Je vois le problème..
la commande run dans la classe Wapt (celle qui est disponible dans la fonction install du paquet) est patchée pour renvoyer de l'unicode (pour des sombres histoires de compatibitlité ascendante)
Mais la commande setuphelpers.run renvoie de l'unicode ou des bytes (chaine brute en sortie de la commande lancée) avec l'attribut returncode suivant que la commande lancée est en unicode ou en bytes.

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

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

Pour votre cas, il faut donc prendre la fonction run directe de setuphelpers :

Code : Tout sélectionner

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')
Tranquil IT
seb b
Messages : 23
Inscription : 26 oct. 2017 - 15:12

18 déc. 2019 - 10:07

Super!

ça fonctionne, merci beaucoup.
Je n'ai plus qu'à faire le reste du paquet.

Encore merci!
gaelds
Messages : 226
Inscription : 22 nov. 2015 - 08:37

29 nov. 2023 - 16:21

Bonjour,
j'essaye de faire la même chose que "Seb b" mais je n'arrive pas à récupérer le code de retour avec result.returncode. Je pense que l'install plante dès le premier run avec les erreurs ci-dessous. Quand le mot de passe fourni correspond à celui du BIOS, le script affiche "Code retour = 0.".
Configuration BIOS Dell avec pass
Erreur lors de l'installation de ['dst-Bios_DELL_Update-wapt']: erreurs dans les paquets [[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", line 16, in install\n File "C:\\Program Files (x86)\\wapt\\common.py", line 3860, in run\n return ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n File "C:\\Program Files (x86)\\wapt\\waptutils.py", line 2118, in run\n raise CalledProcessErrorOutput(proc.returncode, cmd, \'\'.join(output))\nwaptutils.CalledProcessErrorOutput: Command \'"C:\\\\Program Files (x86)\\\\Dell\\\\Command Configure\\\\X86_64\\\\cctk.exe" -i cctk.ini --valsetuppwd=password -l c:\\\\dell_cctk.log\' returned non-zero exit status 58.\nOutput:CCTKAppEngVer=4.10.1.11\r\n\r\nThe setup password provided is incorrect. Please try again.\r\n\n']]
Traceback (most recent call last):
File "C:\Program Files (x86)\wapt\waptservice\service.py", line 1910, in run
self.running_task.run()
File "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", line 716, in run
self._run()
File "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", line 1288, in _run
raise Exception(_('Error during install of {}: errors in packages {}').format(
Exception: Erreur lors de l'installation de ['dst-Bios_DELL_Update-wapt']: erreurs dans les paquets [[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", line 16, in install\n File "C:\\Program Files (x86)\\wapt\\common.py", line 3860, in run\n return ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n File "C:\\Program Files (x86)\\wapt\\waptutils.py", line 2118, in run\n raise CalledProcessErrorOutput(proc.returncode, cmd, \'\'.join(output))\nwaptutils.CalledProcessErrorOutput: Command \'"C:\\\\Program Files (x86)\\\\Dell\\\\Command Configure\\\\X86_64\\\\cctk.exe" -i cctk.ini --valsetuppwd=password -l c:\\\\dell_cctk.log\' returned non-zero exit status 58.\nOutput:CCTKAppEngVer=4.10.1.11\r\n\r\nThe setup password provided is incorrect. Please try again.\r\n\n']]

Exception: Erreur lors de l'installation de ['dst-Bios_DELL_Update-wapt']: erreurs dans les paquets [[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", line 16, in install\n File "C:\\Program Files (x86)\\wapt\\common.py", line 3860, in run\n return ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n File "C:\\Program Files (x86)\\wapt\\waptutils.py", line 2118, in run\n raise CalledProcessErrorOutput(proc.returncode, cmd, \'\'.join(output))\nwaptutils.CalledProcessErrorOutput: Command \'"C:\\\\Program Files (x86)\\\\Dell\\\\Command Configure\\\\X86_64\\\\cctk.exe" -i cctk.ini --valsetuppwd=password -l c:\\\\dell_cctk.log\' returned non-zero exit status 58.\nOutput:CCTKAppEngVer=4.10.1.11\r\n\r\nThe setup password provided is incorrect. Please try again.\r\n\n']]
Traceback (most recent call last):
File "C:\Program Files (x86)\wapt\waptservice\service.py", line 1910, in run
self.running_task.run()
File "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", line 716, in run
self._run()
File "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", line 1288, in _run
raise Exception(_('Error during install of {}: errors in packages {}').format(
Exception: Erreur lors de l'installation de ['dst-Bios_DELL_Update-wapt']: erreurs dans les paquets [[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", line 16, in install\n File "C:\\Program Files (x86)\\wapt\\common.py", line 3860, in run\n return ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n File "C:\\Program Files (x86)\\wapt\\waptutils.py", line 2118, in run\n raise CalledProcessErrorOutput(proc.returncode, cmd, \'\'.join(output))\nwaptutils.CalledProcessErrorOutput: Command \'"C:\\\\Program Files (x86)\\\\Dell\\\\Command Configure\\\\X86_64\\\\cctk.exe" -i cctk.ini --valsetuppwd=password -l c:\\\\dell_cctk.log\' returned non-zero exit status 58.\nOutput:CCTKAppEngVer=4.10.1.11\r\n\r\nThe setup password provided is incorrect. Please try again.\r\n\n']]

Code : Tout sélectionner

# -*- 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 de l’utilisateur
sfonteneau
Expert WAPT
Messages : 1787
Inscription : 10 juil. 2014 - 23:52
Contact :

29 nov. 2023 - 22:45

le message dans votre cas c'est : The setup password provided is incorrect. Please try again avec exit code 58

donc si vous voulez catcher le code 58 je vous conseil d'utiliser accept_returncodes :

Code : Tout sélectionner

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")
ou pour le basculer en erreur :

Code : Tout sélectionner

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")
Verrouillé