[RESUELTO] Paquete de configuración del BIOS de DELL

Preguntas sobre paquetes WAPT / Solicitudes y ayuda sobre paquetes WAPT.
Reglas del foro
Reglas del foro de la comunidad
* Soporte en inglés en www.reddit.com/r/wapt
* El soporte de la comunidad en francés está disponible en este foro
* Por favor, anteponga [RESUELTO] al título del tema si está resuelto.
* Por favor, no edite un tema que esté etiquetado como [RESUELTO]. Abra un nuevo tema haciendo referencia al anterior.
* Especifique la versión de WAPT instalada, la versión completa y el número de compilación (2.2.1.11957 / 2.2.2.12337 / etc.), así como la edición Enterprise/Discovery.
* Las versiones 1.8.2 y anteriores ya no son compatibles. Las únicas preguntas aceptadas sobre la versión 1.8.2 están relacionadas con la actualización a una versión compatible (2.1, 2.2, etc.).
* Especifique el sistema operativo del servidor (Linux/Windows) y la versión (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019).
* Especifique el sistema operativo de la máquina de administración/creación de paquetes y de la máquina con el agente problemático, si corresponde (Windows 7/10/11/Debian 11/etc.).
* Evite hacer varias preguntas al abrir un tema, ya que podría ser ignorado. Si hay varios temas, ábralos por separado, preferiblemente uno tras otro y no todos a la vez (es decir, no sature el foro con spam).
* Incluya fragmentos de código, capturas de pantalla y otras imágenes directamente en la publicación. Los enlaces a Pastebin, Bitly y otros sitios de terceros serán eliminados sistemáticamente.
* Como en cualquier foro comunitario, el soporte es proporcionado voluntariamente por los miembros. Si necesita soporte comercial, puede comunicarse con el departamento de ventas de Tranquil IT al 02.40.97.57.55.
seb b
Mensajes: 23
Inscripciones: 26 Oct 2017 - 15:12 horas.

17 de diciembre de 2019 - 15:35

Hola a todos,

Estoy intentando crear un paquete de configuración para DELL UEFI BIOS usando su herramienta cctk.
Algunas computadoras tienen contraseña de BIOS, otras no. Tampoco queremos que las contraseñas de BIOS se transmitan en texto plano, así que generé ejecutables con CCT: uno que elimina la contraseña y otro que la restablece.

Me gustaría seguir estos pasos en mi paquete WAPT:
  • Compruebe si la contraseña está configurada
  • Si es así, ejecute el ejecutable que lo elimina
  • realizar los cambios programados
  • Ejecute el ejecutable que restablece la contraseña
La única forma que encontré para verificar si la contraseña está configurada es generar un error en cctk con una contraseña incorrecta; luego me da un código de retorno que me indica si hay una contraseña configurada o no.
Mi problema es que no puedo capturar este código de retorno.

Cuando hago mi pedido:

Código: Seleccionar todo

run (r'"C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" --numlock=enabled --valsetuppwd=impossiblepasswd'")
Tengo un CalledProcessErrorOutput (normal) que muestra este código de retorno

Código: Seleccionar todo

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.
Me gustaría poder recuperar este código de salida (58 y 106 en mi caso específico) para poder verificar mi primera condición.

Probé un try/except en el comando para capturar el código de retorno, funciona muy bien en pyscripter pero es imposible iniciar un paquete en los clientes.

Código: Seleccionar todo

# -*- 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()
    
En el entorno de PyScripter, al iniciar la configuración de ejecución "install" se muestra correctamente el valor Verdadero o Falso, así como el código de retorno correspondiente.

Código: Seleccionar todo

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 vez que el paquete está en el repositorio y se implementa en una máquina de prueba, aparece este error:

Código: Seleccionar todo

UnboundLocalError: local variable 'cctkerrorcode' referenced before assignment
Intenté definir la variable cctkerrorcode al comienzo de la función ispwddefined(), y aquí hay algo aún más curioso: el paquete es exitoso y el resultado es:

Código: Seleccionar todo

NumLock=Enabled

None
Tengo la impresión que en este caso no ve el error cctk...

Debo admitir que estoy empezando a quedarme corto en lo que sé hacer...

¿Alguien sabe cómo capturar códigos de retorno de una manera más básica?

Gracias de antemano por su ayuda.

Seb.
seb b
Mensajes: 23
Inscripciones: 26 Oct 2017 - 15:12 horas.

17 de diciembre de 2019 - 15:46

Hola de nuevo,

Estoy echando leña al fuego y pido disculpas de antemano...

Acabo de probarlo ejecutando el comando que debería generar un error, especificando que debe aceptar el código de retorno 58 (se ha definido una contraseña; no se proporcionó la correcta), y no hubo ningún error. El código de retorno que intento recuperar se devuelve al comando "run". ¿Es posible recuperar este código fácilmente en una variable?

Código: Seleccionar todo

run (r'"C:\Program Files (x86)\Dell\Command Configure\X86_64\cctk.exe" --numlock=enabled --valsetuppwd=impossiblepasswd', accept_returncodes=[0,58])
Avatar de usuario
htouvet
Experto en WAPT
Mensajes: 436
Inscripción: 16 de marzo de 2015 - 10:48
Contacto :

17 de diciembre de 2019 - 15:54

El comando `run` devuelve una cadena ligeramente enriquecida...
Un atributo de código de retorno proporciona el código de retorno.

Código: Seleccionar todo

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
Mensajes: 23
Inscripciones: 26 Oct 2017 - 15:12 horas.

17 de diciembre de 2019 - 16:12

¡GRACIAS!

Desafortunadamente, parece que el resultado de `run` no es un objeto sino Unicode (no estoy seguro de mi terminología, lo admito) :ups: ).

Código: Seleccionar todo

AttributeError: 'unicode' object has no attribute 'returncode'
Intenté imprimir directamente el comando de ejecución con exactamente el mismo resultado.

Código: Seleccionar todo

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 usuario
htouvet
Experto en WAPT
Mensajes: 436
Inscripción: 16 de marzo de 2015 - 10:48
Contacto :

17 de diciembre de 2019 - 19:04

Con wapt 1.7.4, es Unicode enriquecido con el atributo...
¿Qué versión tienes?
TI tranquila
seb b
Mensajes: 23
Inscripciones: 26 Oct 2017 - 15:12 horas.

18 de diciembre de 2019 - 8:10 AM

Hola,

estamos en la versión 1.7.4.6229.
Avatar de usuario
htouvet
Experto en WAPT
Mensajes: 436
Inscripción: 16 de marzo de 2015 - 10:48
Contacto :

18 de diciembre de 2019 - 09:32

Veo el problema...
El comando `run` de la clase Wapt (el que está disponible en la función `install` del paquete) está parcheado para devolver Unicode (por oscuras razones de compatibilidad con versiones anteriores)
Pero el comando setuphelpers.run devuelve unicode o bytes (salida de cadena sin formato del comando iniciado) con el atributo returncode dependiendo de si el comando iniciado está en unicode o bytes.

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

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

En su caso, deberá utilizar la función de ejecución directa de setuphelpers:

Código: Seleccionar todo

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')
TI tranquila
seb b
Mensajes: 23
Inscripciones: 26 Oct 2017 - 15:12 horas.

18 de diciembre de 2019 - 10:07 AM

¡Genial!

Funciona, muchísimas gracias.
Ahora solo me falta completar el resto del paquete.

¡Gracias de nuevo!
Gaelds
Mensajes: 254
Inscripción: 22 de noviembre de 2015 - 08:37

29 de noviembre de 2023 - 16:21

Buen día,
Estoy intentando hacer lo mismo que con "Seb b", pero no puedo obtener el código de retorno con `result.returncode`. Creo que la instalación falla la primera vez que se ejecuta, con los errores que se indican a continuación. Cuando la contraseña proporcionada coincide con la contraseña del BIOS, el script muestra "Código de retorno = 0".
Configuración de la BIOS de Dell con
error al instalar ['dst-Bios_DELL_Update-wapt']: errores en los paquetes [[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' mature='DEV'), 'Traceback (most recent llamada última):\n Archivo "C:\\Program Files (x86)\\wapt\\common.py", línea 5192, en install\n resultado = self.install_wapt(p.localpath,\n Archivo "C:\\Program Files (x86)\\wapt\\common.py", línea 4176, en install_wapt\n generar e\n Archivo "C:\\Program Files (x86)\\wapt\\common.py", línea 4083, en install_wapt\n estado de salida = setup.install()\n Archivo "C:\\Windows\\TEMP\\waptpzh4plq3\\setup.py", línea 16, en install\n Archivo "C:\\Program Files (x86)\\wapt\\common.py", línea 3860, en run\n devolver ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n Archivo "C:\\Program Files (x86)\\wapt\\waptutils.py", línea 2118, en run\n raise CalledProcessErrorOutput(proc.returncode, cmd, \'\'.join(output))\nwaptutils.CalledProcessErrorOutput: El comando \'"C:\\\\Program Files (x86)\\\\Dell\\\\Command Configure\\\\X86_64\\\\cctk.exe" -i cctk.ini --valsetuppwd=password -lc:\\\\dell_cctk.log\' devolvió un estado de salida distinto de cero 58.\nSalida:CCTKAppEngVer=4.10.1.11\r\n\r\nLa contraseña de configuración proporcionada es incorrecta. Inténtelo de nuevo.\r\n\n']]
Traceback (última llamada más reciente):
Archivo "C:\Program Files (x86)\wapt\waptservice\service.py", línea 1910, en run
self.running_task.run()
Archivo "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", línea 716, en run
self._run()
Archivo "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", línea 1288, en _run
raise Exception(_('Error durante la instalación de {}: errores en los paquetes {}').format(
Excepción: Error durante la instalación de ['dst-Bios_DELL_Update-wapt']: errores en los paquetes [[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' mature='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 Archivo "C:\\Program Files (x86)\\wapt\\common.py", línea 4083, en install_wapt\n exitstatus = setup.install()\n Archivo "C:\\Windows\\TEMP\\waptpzh4plq3\\setup.py", línea 16, en install\n Archivo "C:\\Program Files (x86)\\wapt\\common.py", línea 3860, en run\n return ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n Archivo "C:\\Program Files (x86)\\wapt\\waptutils.py", línea 2118, en run\n raise CalledProcessErrorOutput(proc.returncode, cmd, \'\'.join(output))\nwaptutils.CalledProcessErrorOutput: El comando \'"C:\\\\Program Files (x86)\\\\Dell\\\\Command Configure\\\\X86_64\\\\cctk.exe" -i cctk.ini --valsetuppwd=password -lc:\\\\dell_cctk.log\' devolvió un estado de salida distinto de cero 58.\nSalida:CCTKAppEngVer=4.10.1.11\r\n\r\nLa contraseña de configuración proporcionada es incorrecta. Inténtelo de nuevo.\r\n\n']]

Excepción: Error al instalar ['dst-Bios_DELL_Update-wapt']: errores en los paquetes [[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' mature='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 Archivo "C:\\Program Files (x86)\\wapt\\common.py", línea 4083, en install_wapt\n exitstatus = setup.install()\n Archivo "C:\\Windows\\TEMP\\waptpzh4plq3\\setup.py", línea 16, en install\n Archivo "C:\\Program Files (x86)\\wapt\\common.py", línea 3860, en run\n return ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n Archivo "C:\\Program Files (x86)\\wapt\\waptutils.py", línea 2118, en run\n raise CalledProcessErrorOutput(proc.returncode, cmd, \'\'.join(output))\nwaptutils.CalledProcessErrorOutput: El comando \'"C:\\\\Program Files (x86)\\\\Dell\\\\Command Configure\\\\X86_64\\\\cctk.exe" -i cctk.ini --valsetuppwd=password -lc:\\\\dell_cctk.log\' devolvió un estado de salida distinto de cero 58.\nSalida: CCTKAppEngVer=4.10.1.11\r\n\r\nLa contraseña de configuración proporcionada es incorrecta. Inténtelo de nuevo.\r\n\n']]
Traceback (última llamada):
Archivo "C:\Program Files (x86)\wapt\waptservice\service.py", línea 1910, en run
self.running_task.run()
Archivo "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", línea 716, en run
self._run()
Archivo "C:\Program Files (x86)\wapt\waptservice\waptservice_common.py", línea 1288, en _run
raise Exception(_('Error durante la instalación de {}: errores en los paquetes {}').format(
Exception: Error durante la instalación de ['dst-Bios_DELL_Update-wapt']: errores en los paquetes [[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' mature='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", línea 16, en install\n Archivo "C:\\Program Files (x86)\\wapt\\common.py", línea 3860, en run\n return ensure_unicode(run(*arg, pidlist=self.pidlist,**args))\n Archivo "C:\\Program Files (x86)\\wapt\\waptutils.py", línea 2118, en 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\' devolvió un estado de salida distinto de cero 58.\nSalida:CCTKAppEngVer=4.10.1.11\r\n\r\nLa contraseña de configuración proporcionada es incorrecta. Inténtelo de nuevo.

Código: Seleccionar todo

# -*- 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 usuario
Sfonteneau
Experto en WAPT
Mensajes: 2312
Registrado: 10 de julio de 2014 - 23:52
Contacto :

29 de noviembre de 2023 - 22:45

El mensaje en su caso es: La contraseña de configuración proporcionada es incorrecta. Inténtelo de nuevo con el código de salida 58

Entonces, si quieres capturar el código 58, te recomiendo usar accept_returncodes:

Código: Seleccionar todo

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 para cambiarlo a error:

Código: Seleccionar todo

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