🇬🇧 | 🇩🇪 | 🇫🇷 | 🇪🇸 | 🇨🇳 | 🇸🇦
Wir haben keine DLL, aber wir haben:
Windows-Dateianalysator und Online-schneller Antivirus

Eine minimalistische Benutzeroberfläche mit schneller Suche, bequemem Hochladen und einer sauberen Abteilungsstruktur.

🛡️🔍 Überprüfen Sie Ihre Datei schnell, klicken Sie einfach auf diese Seite.
Virus-Check, Hashes, Signalüberprüfung, Architektur, KI-Informationen.

Wie man es repariert "Der WinRM Shell-Client kann die Anfrage nicht verarbeiten. Einer der an die WSManRunShellCommand-Funktion übergebenen Argumentwerte ist null oder null".

Beschreibung

This error occurs when you try to execute a remote command via Windows Remote Management (WinRM) or PowerShell Remoting, and the command invocation fails before it even starts executing on the target machine.

Das Kernproblem ist, dass WinRM bei der Initiierung eines Shell-Befehls gültige, nicht leere Argumente erwartet ( WSManRunShellCommand Wenn Ihr Skript, ein Automatisierungswerkzeug (wie Ansible, Jenkins oder Azure DevOps) oder eine manuelle CLI-Eingabe eine leere Zeichenfolge überträgt ( "" ), eine Nullvariable oder ein unsachgemäß entkommener Parameter, bei dem ein Befehl oder ein Argument explizit erforderlich ist, lehnt WinRM die Anfrage mit diesem Fehler ab. Es kann auch durch Zeichenkodierungsfehler, beschädigte WinRM-Sitzungskonfigurationen oder strenge Richtlinienbeschränkungen auf dem Remote-Host ausgelöst werden, die bestimmte Argumente während des Transits entfernen.


Schrittweise Lösungen

Korrektur 1: Überprüfen und reinigen Sie Ihre Kommandoargumente

Meistens wird dieser Fehler durch eine Variable verursacht, die sich vor dem Senden des Befehls auf Null-Recht auswertet.

  1. Locate the script or task Das hat den Fehler ausgelöst.
  2. Review the exact command string wird an den entfernten Host weitergeleitet.
  3. Suchen Sie nach leeren Variablen (z. B. Invoke-Command -ScriptBlock { & $executable $arguments } Wo ? $executable oder... $arguments ist entweder leer oder null).
  4. Hardcode a simple test command (wie whoami oder... hostname ) anstelle Ihrer Variablen.
  5. Wenn der Testbefehl funktioniert, fügen Sie Validierungslogik zu Ihrem Skript hinzu, um sicherzustellen, dass keine Argumente Null sind, bevor Sie ausgeführt werden, so:
    if (-not [string]::IsNullOrEmpty($myArgument)) {
        # Run your WinRM command here
    }

Korrektur 2: Registrieren und Neustart des WinRM-Dienstes

Wenn die Argumente in Ordnung sind, könnte die WinRM-Dienstkonfiguration entweder auf dem Client oder dem Host fehlerhaft oder nicht synchron sein.

  1. Klicken Sie auf Start Speisekarte, Typ cmd Mit der rechten Maustaste. Command Prompt, und wählen Run as administrator.
  2. Stoppen Sie den WinRM-Dienst, indem Sie den folgenden Befehl eingeben und drücken Enter:
    net stop winrm
  3. Registrieren Sie die WinRM-Konfiguration ab, um festgefahrene Zustände zu löschen:
    winrm unconfig
  4. Wiederherstellen der WinRM-Konfiguration und der Firewall-Ausnahmen:
    winrm quickconfig -q
  5. Neustart des Dienstes, um Änderungen sauber anzuwenden:
    net start winrm

Korrektur 3: Korrektur des Arguments, das der Automatisierung durch Dritte entgeht (Ansible/Jenkins)

Wenn Sie diesen Fehler bei der Verwendung von Automatisierungsplattformen zur Steuerung von Windows-Knoten auftreten, liegt das Problem in der Regel darin, wie Anführungszeichen oder Sonderzeichen verarbeitet werden.

  1. Öffnen Sie Ihr Konfigurationsbuch oder Pipeline-Skript.
  2. Überprüfen Sie, ob Sie Befehle mit verschachtelten Anführungszeichen (z. B. "powershell.exe -Command "Write-Output 'Hello'"" ) ist.
  3. Change the escaping style In Ansible verwenden Sie beispielsweise win_shell Modul anstelle von RAW win_command, oder wickeln Sie Ihre PowerShell-Befehle mit dem buchstäblichen Blockskalar ( | ) um zu verhindern, dass YAML Argumente in Nullwerte umwandelt:
    - name: Run powershell script safely
      ansible.windows.win_shell: |
        $path = "C:\Program Files\App"
        Start-Process -FilePath "$path\run.exe"

Korrektur 4: Erhöhen Sie WinRM MaxShellsPerUser und MaxMemoryPerShell

Manchmal lässt WinRM Argumente fallen oder gibt Null-interne Zeiger zurück, weil ihm die zugewiesenen Betriebsressourcen ausgehen.

  1. Öffnen. PowerShell as an Administrator auf dem Ziel-Windows-Rechner.
  2. Überprüfen Sie Ihre aktuellen MaxShellsPerUser- und MaxMemory-Konfigurationen:
    Get-Item WSMan:\localhost\Shell\*
  3. Erhöhen Sie die Speichergrenze pro Shell, um stille Abstürze während der Parsierung von Argumenten zu verhindern:
    Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 1024
  4. Erhöhen Sie die Grenze der gleichzeitigen Shell, um sicherzustellen, dass Ihr Prozess nicht erstickt wird:
    Set-Item WSMan:\localhost\Shell\MaxShellsPerUser 30
  5. Wiederaufsetzen des WinRM-Dienstes, um die Ressourcenaktualisierungen anzuwenden:
    Restart-Service winrm
ERROR_WSMAN_SHELL_INVALID_SHELL_HANDLE | ERROR_WSMAN_SHELL_INVALID_COMMAND_HANDLE | ERROR_WSMAN_COMMAND_ALREADY_CLOSED | ERROR_WSMAN_SENDSHELLINPUT_INVALID_STREAMID_INDEX | ERROR_WSMAN_SHELL_SYNCHRONOUS_NOT_SUPPORTED

Es kann einige Fehler geben.. Learn Microsoft