🇬🇧 | 🇩🇪 | 🇫🇷 | 🇪🇸 | 🇨🇳 | 🇸🇦
ليس لدينا DLL ولكن لدينا:
تحليل ملفات ويندوز & مكافحة الفيروسات السريعة عبر الإنترنت

واجهة بسيطة تتميز بالبحث السريع، والتحميل المريح، وهيكل القسم النظيف.

🛡️🔍 التحقق السريع ملفك، مجرد إسقاط على هذه الصفحة.
فحص الفيروسات، التجزئة، التحقق من التوقيع، الهندسة المعمارية، معلومات الذكاء الاصطناعي.

كيفية إصلاح "عميل WinRM Shell لا يستطيع معالجة الطلب. إحدى قيم الحجج التي تم تمريرها إلى وظيفة WSManRunShellCommand هي null أو صفر".

الوصف

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.

القضية الأساسية هي أن WinRM تتوقع حجج صالحة غير فارغة عند بدء أمر قذيفة ( WSManRunShellCommand إذا كان النص الخاص بك، أداة التشغيل الآلي (مثل Ansible، Jenkins، أو Azure DevOps) ، أو إدخال CLI يدوي يمر سلسلة فارغة ( "" ), متغير صفر ، أو معيار هرب بشكل غير صحيح حيث يتم طلب أمر أو حجة صراحة ، يرفض WinRM الطلب مع هذا الخطأ. يمكن أيضًا أن يتم تشغيله بسبب عدم تطابق تشفير الأحرف ، أو تكوينات جلسة WinRM المتلفة ، أو قيود سياسة صارمة على المضيف البعيد التي تمحو الحجج المحددة أثناء النقل.


إصلاحات خطوة بخطوة

إصلاح 1: تحقق وتطهير حجج الأوامر الخاصة بك

في معظم الأحيان، يسبب هذا الخطأ متغير يقيّم إلى صفر قبل إرسال الأمر.

  1. Locate the script or task الذي أثار الخطأ.
  2. Review the exact command string يتم تمريرها إلى المضيف البعيد.
  3. ابحث عن متغيرات فارغة (على سبيل المثال، Invoke-Command -ScriptBlock { & $executable $arguments } أين ؟ $executable أو $arguments يحدث أن تكون فارغة أو خالية).
  4. Hardcode a simple test command (مثل) whoami أو hostname ) في مكان المتغيرات الخاصة بك.
  5. إذا كانت أوامر الاختبار تعمل، أضف منطق التحقق من صحة النص الخاص بك للتأكد من عدم وجود حجج فارغة قبل التنفيذ، مثل هذا:
    if (-not [string]::IsNullOrEmpty($myArgument)) {
        # Run your WinRM command here
    }

إصلاح 2: إعادة تسجيل وإعادة تشغيل خدمة WinRM

إذا كانت الحجج على ما يرام، فإن تكوين خدمة WinRM على العميل أو المضيف قد يكون معطلاً أو غير متزامن.

  1. اضغط على Start قائمة، نوع cmd انقر على الزر الأيمن Command Prompt ، وتحديد Run as administrator.
  2. أوقف خدمة WinRM عن طريق كتابة الأمر التالي والضغط Enter:
    net stop winrm
  3. إلغاء تسجيل تكوين WinRM لإزالة الحالات المتعثرة:
    winrm unconfig
  4. إعادة تشغيل تكوين WinRM الافتراضي واستثناءات جدار الحماية:
    winrm quickconfig -q
  5. إعادة تشغيل الخدمة لتطبيق التغييرات بشكل نظيف:
    net start winrm

إصلاح 3: إصلاح حجة الهروب لأتمتة الطرف الثالث (Ansible / Jenkins)

إذا كنت تواجه هذا الخطأ أثناء استخدام منصات التشغيل الآلي للتحكم في عقد ويندوز، تكمن المشكلة عادة في كيفية معالجة الاقتباسات أو الحروف الخاصة.

  1. افتح كتاب التكوين الخاص بك أو نص خط الأنابيب.
  2. تحقق مما إذا كنت تمرر الأوامر مع علامات الاستشهاد المتداخلة (على سبيل المثال، "powershell.exe -Command "Write-Output 'Hello'"" )
  3. Change the escaping style على سبيل المثال، في Ansible، استخدم win_shell وحدات بدلا من خام win_command ، أو قم بتغليف أوامر PowerShell الخاصة بك باستخدام مقياس الكتل الحرفية ( | ) لمنع YAML من تحويل الحجج إلى قيم صفرية:
    - name: Run powershell script safely
      ansible.windows.win_shell: |
        $path = "C:\Program Files\App"
        Start-Process -FilePath "$path\run.exe"

إصلاح 4: زيادة WinRM MaxShellsPerUser و MaxMemoryPerShell

في بعض الأحيان ينزل WinRM الحجج أو يعيد المؤشرات الداخلية الصافية لأنه ينفد من الموارد التشغيلية المخصصة.

  1. افتح PowerShell as an Administrator على جهاز ويندوز المستهدف
  2. تحقق من تكوينات MaxShellsPerUser و MaxMemory الحالية:
    Get-Item WSMan:\localhost\Shell\*
  3. زيادة الحد الأقصى للذاكرة لكل قذيفة لمنع حدوث حوادث صامتة أثناء تحليل الحجج:
    Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 1024
  4. قم بزيادة الحد المحدد للقشرة المتزامنة لضمان عدم خنق العملية:
    Set-Item WSMan:\localhost\Shell\MaxShellsPerUser 30
  5. إعادة تشغيل خدمة WinRM لتطبيق تحديثات الموارد:
    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

قد يكون هناك بعض الأخطاء. Learn Microsoft