Page 1 sur 2

[RESOLU] paquet de configuration des bios DELL

Posté : 17 déc. 2019 - 15:35
par seb b
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.

Re: paquet de configuration des bios DELL

Posté : 17 déc. 2019 - 15:46
par seb b
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])

Re: paquet de configuration des bios DELL

Posté : 17 déc. 2019 - 15:54
par htouvet
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')

Re: paquet de configuration des bios DELL

Posté : 17 déc. 2019 - 16:12
par seb b
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)

Re: paquet de configuration des bios DELL

Posté : 17 déc. 2019 - 19:04
par htouvet
AVec wapt 1.7.4, c'est de l'unicode enrichi de l'attribut...
Quelle version avez-vous ?

Re: paquet de configuration des bios DELL

Posté : 18 déc. 2019 - 08:10
par seb b
Bonjour,

nous sommes en 1.7.4.6229.

Re: paquet de configuration des bios DELL

Posté : 18 déc. 2019 - 09:32
par htouvet
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')

Re: paquet de configuration des bios DELL

Posté : 18 déc. 2019 - 10:07
par seb b
Super!

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

Encore merci!

Re: [RESOLU] paquet de configuration des bios DELL

Posté : 29 nov. 2023 - 16:21
par gaelds
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")

Re: [RESOLU] paquet de configuration des bios DELL

Posté : 29 nov. 2023 - 22:45
par sfonteneau
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")