Corrección de error de Windows: Parámetro de cliente de WinRM Shell nulo o cero
Descripción del error
This error occurs when you attempt to run a command or script remotely using Windows Remote Management (WinRM), PowerShell Remoting, or a software provisioning tool like Ansible, Jenkins, or Terraform. The specific error message states: "El cliente WinRM Shell no puede procesar la solicitud. Uno de los parámetros requeridos para la función WSManRunShellCommand es cero".
Este problema generalmente se desencadena por un desajuste en la configuración WinRM entre el cliente y el servidor, variables de entorno dañadas en la máquina de destino o una cadena de comandos vacía que se pasa a la API WinRM. Cuando el servicio WinRM recibe una carga útil de comandos que está mal formateada, incompleta o contiene argumentos vacíos, no puede ejecutar la función y arroja esta excepción.
Soluciones paso a paso
Siga estos pasos para resolver el problema.
Paso 1: Verificar la carga útil del comando
La causa más común es pasar una cadena de comandos vacía o nula al motor de ejecución remota.
- Compruebe el script o el software (como Ansible o Jenkins) que está provocando el error.
- Asegúrese de que las variables que contienen los comandos no estén vacías, no definidas o no se evalúen a un valor nulo.
- Si está utilizando un bloque de código, verifique que no haya errores de sintaxis que causen que la cadena de comandos se rompa antes de enviarla.
Paso 2: Verificación y reparación de las variables de entorno de la trayectoria del sistema
Un sistema dañado o perdido. Path variable on the target remote machine can prevent WinRM from finding the required executables (like cmd.exe - ¿ Qué ? powershell.exe ), lo que hace que pase un parámetro nulo internamente.
- En la máquina de Windows de destino, abra el menú Inicio, escriba Environment Variables, y seleccione Edit the system environment variables.
- Haga clic en el Environment Variables... el botón en la parte inferior de la ventana.
- ¿ Por qué ? System variables Localiza el... Path variable y haga clic Edit.
- Asegurar la existencia de las siguientes entradas críticas:
%SystemRoot%\system32%SystemRoot%%SystemRoot%\System32\Wbem%SystemRoot%\System32\WindowsPowerShell\v1.0\
- Si falta alguno de estos, haga clic New y añadirlos manualmente.
- Haga clic OK para guardar todos los cambios y reiniciar el ordenador para aplicarlos.
Paso 3: Aumente el WinRM MaxShellsPerUser y el MaxMemoryPerShell
Si el servidor de destino se está quedando sin recursos WinRM asignados, podría dejar caer parámetros durante el procesamiento.
- Haga clic derecho en el menú Inicio de Windows y seleccione Windows PowerShell (Admin) - ¿ Qué ? Command Prompt (Admin) en la máquina objetivo.
- Compruebe los límites de configuración actuales de WinRM ejecutando:
winrm get winrm/config/winrs - Aumentar la memoria máxima asignada por shell para evitar caídas fuera de memoria:
winrm set winrm/config/winrs @{MaxMemoryPerShellMB="1024"} - Aumentar el número máximo de shells concurrentes por usuario para manejar múltiples solicitudes paralelas:
winrm set winrm/config/winrs @{MaxShellsPerUser="30"}
Paso 4: Reinicie el servicio de administración remota de Windows
Aplique los nuevos cambios de configuración reiniciando el servicio WinRM.
- Abra PowerShell como administrador.
- Ejecute el siguiente comando para reiniciar el servicio WinRM:
Restart-Service WinRM -Force - Si está usando el Prompt de comandos estándar, ejecute estos comandos en su lugar:
net stop winrm net start winrm
Paso 5: Registre de nuevo los componentes WSMan (si están dañados)
Si los archivos WSMan DLL subyacentes no están registrados o están dañados, puede volver a registrarlos para solucionar problemas profundos del sistema.
- Abrir el Prompt de comandos como administrador.
- Ejecutar los siguientes comandos uno por uno para volver a registrar los componentes centrales:
regsvr32 WsmSvc.dll regsvr32 WsmWmiPl.dll - Reinicie la máquina después de que aparezcan las ventanas de confirmación de registro.
Puede haber algunos errores.. Learn Microsoft