Erreur WinRM de Windows: le paramètre d'entrée WSManSendShellInput est nul ou nul
Définition
Cette erreur se produit généralement pendant les sessions de gestion PowerShell à distance (WinRM) lorsqu'il y a une incompatibilité, une corruption ou une dérive de configuration entre la machine client et l'hôte distant. WSManSendShellInput ) était manquante, corrompue ou évaluée à zéro.
Les causes profondes les plus courantes sont les suivantes:
- Des paramètres d'écoute WinRM corrompus ou des variables d'environnement système défectueuses.
- Logiciel d'inspection de paquets réseau (comme les pare-feu, les proxies ou les suites antivirus) décapant les en-têtes ou modifiant la charge utile au milieu du transit.
- Des schémas de configuration WinRM incompatibles ou corrompus entre les systèmes d'exploitation locaux et distants.
- Limitations de gestion de la mémoire au sein du fournisseur de shell WinRM sur la machine cible.
Réparations étape par étape
Suivez ces solutions séquentiellement à partir de l'ordinateur client (et, le cas échéant, sur l'ordinateur hôte) pour résoudre le problème.
Solution 1: redémarrer et réinitialiser le service WinRM
L'état d'exécution corrompu dans le service WinRM peut entraîner une défaillance des paramètres de l'API. Le redémarrage et l'enregistrement des paramètres par défaut du service éliminent souvent cette erreur.
- Ouvrez le menu Démarrer, tapez cmd, cliquez avec le bouton droit. Command Prompt, et sélectionnez Run as administrator.
- Arrêtez le service WinRM en exécutant la commande suivante:
net stop winrm - Démarrez le service WinRM à nouveau:
net start winrm - Exécutez l'outil de configuration rapide pour réparer les paramètres par défaut brisés, les auditeurs ou les exceptions de pare-feu:
winrm quickconfig - Quel type ? y (Oui) si vous êtes invité à apporter des modifications ou à créer un nouvel auditeur WinRM.
Solution 2: effacer les limites de MaxShellsPerUser et MaxMemoryPerShellMB
If the remote shell process hits an allocation limit, it may fail to populate the parameters required by the WSManSendShellInput fonction.
- Le lancement. PowerShell as an Administrator sur le client et sur l'ordinateur distant (s'il est accessible).
- Vérifiez les paramètres de configuration existants en exécutant:
Get-Item WSMan:\localhost\Shell\* - Augmenter la limite de mémoire par shell pour s'assurer que les objets complexes ne se tronquent pas en objets nuls:
Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 2048 - Augmenter le nombre de shells autorisés par utilisateur pour éviter les conflits de session simultanés:
Set-Item WSMan:\localhost\Shell\MaxShellsPerUser 30 - Redémarrez le service WinRM pour appliquer ces modifications immédiatement:
Restart-Service winrm
Solution 3: Reconstruisez les auditeurs WinRM
Si les auditeurs par défaut ont des propriétés corrompues, vous devez les supprimer complètement et les reconstruire pour vous assurer que les paramètres de l'API correspondent aux spécifications du système natif.
- Ouvrez. Command Prompt as an administrator.
- Voir vos auditeurs WinRM actifs en cours d' exécution:
winrm enumerate winrm/config/listener - Supprimez les écouteurs défectueux en utilisant cette commande:
winrm delete winrm/config/listener?Address=*+Transport=HTTP(Remarque: changez HTTP en HTTPS si votre infrastructure réseau utilise spécifiquement WinRM sur SSL).
- Reconstruire l'infrastructure d'écoute à partir de modèles de système propres:
winrm quickconfig
Solution 4: Corriger les variables d'environnement et le chemin du système
The WinRM sub-system relies heavily on underlying system environment variables to process structural payload schemas. Missing entries like %SystemRoot% peut conduire à des paramètres nuls.
- Appuie sur le... Windows Key + R, type
sysdm.cpl, et frappe. Enter pour ouvrir les propriétés du système. - Naviguez vers le... Advanced Ouvrez la touche et cliquez sur le Environment Variables le bouton en bas.
- Sous le... System variables section, localiser la variable nommée Path et cliquez Edit.
- Ensure that the following default Windows paths are explicitly listed. If they are missing, click New les ajouter:
C:\Windows\system32C:\WindowsC:\Windows\System32\WbemC:\Windows\System32\WindowsPowerShell\v1.0\
- Cliquez. OK sur toutes les fenêtres pour enregistrer les modifications, puis redémarrez votre ordinateur.
Solution 5: contourner temporairement l'inspection SSL ou du réseau
Les applications de sécurité ou les équilibrateurs de charge matériels peuvent supprimer les en-têtes personnalisés, ce qui provoque l'arrivée d'arguments API WSMan vides au point final.
- Si vous utilisez un serveur proxy, le contourner temporairement pour les adresses de routage locales en exécutant ceci dans une fenêtre PowerShell élevée:
$env:no_proxy="localhost,127.0.0.1,your-remote-host-ip" - Si le problème est isolé à une machine cible de confiance spécifique, ajoutez-le directement à votre client TrustedHosts liste pour éliminer le filtrage de poignée de main:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "your-remote-host-name-or-IP" -Force - Testez à nouveau votre connexion à distance.
Pour aider à identifier le problème plus précisément, pourriez-vous fournir quelques détails supplémentaires:
- Vous recevez cette erreur en exécutant un specific script ou ça arrive ? immediately upon connecting?
- Quoi donc ? Windows OS versions sont installés à la fois sur votre client local et l'hôte distant?
- Vous vous connectez via un réseau local ? VPN, ou par l' intermédiaire d' un domain controller environment?
Il y a peut-être des erreurs.. Learn Microsoft