Error WinRM de Windows: el parámetro de entrada de WSManSendShell es nulo o cero
Descripción
Este error generalmente ocurre durante las sesiones de administración remota de PowerShell (WinRM) cuando hay un desajuste, corrupción o deriva de configuración entre la máquina cliente y el host remoto. Significa que el cliente de la cáscara WinRM intentó enviar datos al punto final remoto, pero uno de los parámetros estructurales esenciales requeridos por la función API interna ( WSManSendShellInput ) faltaba, se corrompió o se evaluó a cero.
Las causas raíz más comunes incluyen:
- Configuración del oyente WinRM dañada o variables del entorno del sistema dañadas.
- Software de inspección de paquetes de red (como cortafuegos, proxies o paquetes antivirus) que elimina los encabezados o altera la carga útil durante el tránsito.
- Esquemas de configuración WinRM incompatibles o dañados entre los sistemas operativos locales y remotos.
- Limitaciones de gestión de la memoria dentro del proveedor del shell WinRM en la máquina de destino.
Soluciones paso a paso
Sigue estas soluciones secuencialmente desde la máquina cliente (y, en su caso, en la máquina host) para resolver el problema.
Solución 1: Reiniciar y restablecer el servicio WinRM
El estado de ejecución corrompido en el servicio WinRM puede causar que los parámetros de la API no funcionen correctamente.
- Abre el menú Inicio, escribe cmd, haga clic derecho en Command Prompt, y seleccione Run as administrator.
- Detenga el servicio WinRM ejecutando el siguiente comando:
net stop winrm - Reinicie el servicio WinRM:
net start winrm - Ejecute la herramienta de configuración rápida para reparar los parámetros predeterminados rotos, los oyentes o las excepciones del cortafuegos:
winrm quickconfig - ¿ Qué tipo ? y (Sí) si se le solicita hacer cambios o crear un nuevo oyente WinRM.
Solución 2: Eliminar los límites de MaxShellsPerUser y MaxMemoryPerShellMB
If the remote shell process hits an allocation limit, it may fail to populate the parameters required by the WSManSendShellInput la función.
- Lanzamiento. PowerShell as an Administrator tanto en el cliente como en la máquina remota (si es accesible).
- Compruebe los parámetros de configuración existentes ejecutando:
Get-Item WSMan:\localhost\Shell\* - Aumentar el límite de memoria por shell para garantizar que los objetos complejos no se truncen en objetos nulos:
Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 2048 - Aumentar el número de shells permitidos por usuario para evitar conflictos de sesiones simultáneas:
Set-Item WSMan:\localhost\Shell\MaxShellsPerUser 30 - Reinicie el servicio WinRM para aplicar estos cambios inmediatamente:
Restart-Service winrm
Solución 3: Reconstruir los oyentes WinRM
Si los oyentes predeterminados tienen propiedades dañadas, debe eliminarlas por completo y reconstruirlas para asegurarse de que los parámetros de la API coincidan con las especificaciones del sistema nativo.
- Abierto. Command Prompt as an administrator.
- Ver sus oyentes WinRM activos actuales ejecutando:
winrm enumerate winrm/config/listener - Elimine por completo los oyentes defectuosos usando este comando:
winrm delete winrm/config/listener?Address=*+Transport=HTTP(Nota: Cambie HTTP a HTTPS si su infraestructura de red utiliza específicamente WinRM sobre SSL).
- Recrear la infraestructura de escucha a partir de plantillas de sistema limpias:
winrm quickconfig
Solución 4: Corregir las variables de entorno y la ruta del sistema
The WinRM sub-system relies heavily on underlying system environment variables to process structural payload schemas. Missing entries like %SystemRoot% puede conducir a parámetros nulos.
- Presiona el... Windows Key + R, tipo
sysdm.cpl, y golpear Enter para abrir las Propiedades del Sistema. - Navegar hacia el Advanced Seleccione la pestaña y haga clic en Environment Variables el botón en la parte inferior.
- Bajo el... System variables sección, localizar la variable llamada Path y haga clic Edit.
- Ensure that the following default Windows paths are explicitly listed. If they are missing, click New añadir:
C:\Windows\system32C:\WindowsC:\Windows\System32\WbemC:\Windows\System32\WindowsPowerShell\v1.0\
- Haga clic OK en todas las ventanas para guardar los cambios, luego reinicie su computadora.
Solución 5: Evitar temporalmente la inspección de SSL o de red
Las aplicaciones de seguridad o los balanceadores de carga de hardware pueden eliminar encabezados personalizados, haciendo que los argumentos de la API WSMan lleguen vacíos al punto final.
- Si está utilizando un servidor proxy, eludirlo temporalmente para direcciones de enrutamiento locales ejecutando esto en una ventana de PowerShell elevada:
$env:no_proxy="localhost,127.0.0.1,your-remote-host-ip" - Si el problema está aislado a una máquina de destino de confianza específica, añadirlo directamente a su cliente TrustedHosts lista para eliminar el filtrado de apretón de manos:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "your-remote-host-name-or-IP" -Force - Prueba la secuencia de conexión de tu caparazón remota de nuevo.
Para ayudar a identificar el problema más, ¿podría proporcionar algunos detalles más:
- ¿ Está recibiendo este error mientras ejecuta un specific script ¿ O es que sucede ? immediately upon connecting?
- ¿ Qué ? Windows OS versions ¿Están instalados tanto en su cliente local como en el host remoto?
- ¿Se está conectando a través de una red local? VPN, o a través de un domain controller environment?
Puede haber algunos errores.. Learn Microsoft