Corrección de error de Windows: El cliente WinRS no puede procesar la solicitud
This error typically occurs when using Windows Remote Management (WinRM) or Windows Remote Shell (WinRS) to execute commands on a remote computer. The specific error message, "El parámetro requerido para la función WinrsFreePullResult es nulo o cero", indica un desajuste de protocolo, un estado de sesión dañado, problemas de tamaño del búfer o un truncamiento inesperado de la carga útil de datos entre el cliente y la máquina de destino remoto durante la recuperación de datos.
A continuación se muestra la descripción completa y detallada de por qué sucede esto y una guía completa paso a paso para solucionarlo.
Resumen de errores y causas
el WinrsFreePullResult function es una llamada interna de API utilizada por el cliente de Windows Remote Shell para liberar recursos de memoria asignados para extraer resultados de ejecución de comandos del servidor remoto. Cuando esta función recibe un parámetro nulo o cero, significa que el lado del cliente esperaba un puntero de memoria válido o tamaño de fragmento de datos del flujo de red, pero recibió una respuesta vacía o dañada.
Los desencadenantes comunes de este error incluyen:
- Buffer Limit Exhaustion: La salida del comando en la máquina remota es demasiado grande para el buffer WinRM configurado o los límites de tamaño de salida.
- WinRM Service Glitches: El servicio WinRM en el cliente local o host remoto ha entrado en un estado inestable.
- MaxShellsPerUser Limits: La cuenta de usuario ha superado el número máximo de shells remotos simultáneos permitidos por la política de host.
- Network Security Interruption: Los cortafuegos, la inspección profunda de paquetes (DPI) o las caídas de VPN cortan la conexión RPC / WS-Management a mitad de la transmisión, causando un retorno de carga útil nula.
Soluciones paso a paso
Siga estos pasos en secuencia para resolver el error. Necesitará privilegios administrativos tanto en el equipo cliente como en la máquina remota para ejecutar estos comandos.
Paso 1: Reinicie el servicio WinRM
La solución más rápida para la corrupción temporal de la sesión es reiniciar el servicio de administración remota de Windows en ambas máquinas.
- Abre el menú Inicio, escribe cmd Haga clic derecho. Command Prompt, y seleccione Run as administrator.
- Escriba el siguiente comando para detener el servicio:
net stop winrm - Escriba el siguiente comando para reiniciar el servicio:
net start winrm - Realice estos pasos idénticos en la máquina remota si tiene acceso alternativo a ella (por ejemplo, a través de RDP o acceso físico).
Paso 2: Aumentar la MaxMemoryPerShellMB y los búferes de salida
Si el comando que está ejecutando genera cantidades masivas de texto o datos de salida, los límites de memoria WinRM predeterminados dejarán caer la conexión y desencadenarán este error.
- En el... Remote Target Machine ¡ Abierto ! PowerShell as an Administrator.
- Compruebe los límites de la configuración actual ejecutando:
Get-Item WSMan:\localhost\Shell\* - Aumente la memoria asignada por shell desde el valor predeterminado (normalmente 512 MB o 1024 MB) a 2048 MB ejecutando:
Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 2048 - Aumente el número máximo de shells simultáneos permitidos por usuario para asegurarse de que su sesión no se esté ahogando:
Set-Item WSMan:\localhost\Shell\MaxShellsPerUser 30 - Reinicie el servicio WinRM para aplicar estos cambios:
Restart-Service winrm
Paso 3: Modificar las URI y las configuraciones de tiempo de espera en el cliente
Si el cliente abandona la solicitud mientras espera una respuesta de larga duración, el puntero de datos interno se vuelve nulo.
- En su... Local Client Machine ¡ Abierto ! PowerShell as an Administrator.
- Establezca el tiempo de espera estructural predeterminado más alto para permitir que los grandes flujos de datos se completen con éxito:
Set-Item WSMan:\localhost\Client\DefaultPorts\HTTP 5985 Set-Item WSMan:\localhost\Client\NetworkDelayms 60000 - Si está ejecutando el comando usando el
winrsejecutable, apéndice el-tParámetro para aumentar el tiempo de ejecución manualmente. Por ejemplo:winrs -r:RemoteComputerName -t:600 "your-command-here"(Nota: El
-t:600las banderas establecen el límite de tiempo de espera en 600 segundos).
Paso 4: Registro y reparación de la configuración WinRM
Si las configuraciones se han desalineado o los descriptores de seguridad están dañados, restablecer la infraestructura de WinRM puede reparar los puntos finales subyacentes.
- En el... Remote Target Machine ¡ Abierto ! Command Prompt as an Administrator.
- Ejecute la utilidad de configuración para reparar los oyentes y abrir automáticamente las excepciones del cortafuegos:
winrm quickconfig - Si se le pide que haga cambios o analice el estado, presione y y golpear. Enter para aceptarlo.
- Si la configuración ya se está ejecutando, restablezca completamente las configuraciones de configuración a los estados predeterminados utilizando:
winrm invoke restore winrm/config @{} - Vuelve a correr.
winrm quickconfigdespués de una restauración para reconstruir puntos finales limpios.
Paso 5: Compruebe la inspección de paquetes de red y los tamaños de MTU
Los paquetes grandes que contienen cargas útiles de datos pueden fragmentarse a través de rutas de red.
- Deshabilitar la inspección temporal de paquetes profundos o el escaneo de tráfico HTTP para puertos
5985(HTTP) y5986(HTTPS) dentro de los cortafuegos locales o del perímetro de la red. - Ensure that your Network Interface Card (NIC) Maximum Transmission Unit (MTU) size matches on both client and host (Standard value is
1500Puede comprobar esto en el menú de comandos a través de:netsh interface ipv4 show subinterfaces
ERROR_WINRS_CLIENT_SIGNAL_NULL_PARAM | ERROR_WINRS_CLIENT_RECEIVE_NULL_PARAM | ERROR_WINRS_CLIENT_PULL_NULL_PARAM | ERROR_WINRS_CLIENT_CLOSERECEIVEHANDLE_NULL_PARAM | ERROR_WINRS_CLIENT_SEND_NULL_PARAM
Puede haber algunos errores.. Learn Microsoft