خطأ ويندوز WinRM: WSManSendShellInput Parameter هو صفر أو صفر
الوصف
يحدث هذا الخطأ عادة أثناء جلسات إدارة PowerShell البعيدة (WinRM) عندما يكون هناك عدم تطابق أو فساد أو تحرك تكوين بين جهاز العميل والمضيف البعيد. فهو يعني أن عميل قذيفة WinRM حاول إرسال البيانات إلى نقطة النهاية البعيدة ، ولكن واحدة من المعلمات الهيكلية الأساسية المطلوبة من قبل وظيفة API الداخلية ( WSManSendShellInput ) كانت مفقودة أو فاسدة أو تم تقييمها إلى الصفر.
الأسباب الجذرية الشائعة تشمل:
- إعدادات مستمع WinRM المعطلة أو متغيرات بيئة النظام المعطلة.
- برنامج فحص حزم الشبكة (مثل جدران الحماية أو الوكالات أو مجموعات مكافحة الفيروسات) يزيل العناوين أو يغير الحمولة في منتصف النقل.
- مخططات تكوين WinRM غير متطابقة أو فاسدة بين أنظمة التشغيل المحلية والبعيدة.
- قيود إدارة الذاكرة داخل مزود قشرة WinRM على آلة الهدف.
إصلاحات خطوة بخطوة
اتبع هذه الحلول بشكل متسلسل من جهاز العميل (وحيثما ينطبق ، على جهاز المضيف) لحل المشكلة.
الحل 1: إعادة تشغيل وإعادة تعيين خدمة WinRM
حالة تشغيل فاسدة في خدمة WinRM يمكن أن تتسبب في فشل معايير واجهة برمجة التطبيقات. إعادة تشغيل وتسجيل إعدادات الخدمة غالبا ما يزيل هذا الخطأ.
- افتح قائمة البدء، اكتب cmd ، انقر على Command Prompt ، وتحديد Run as administrator.
- أوقف خدمة WinRM بتنفيذ الأمر التالي:
net stop winrm - قم بإعادة تشغيل خدمة WinRM:
net start winrm - قم بتشغيل أداة التكوين السريع لإصلاح أي معايير افتراضية معطلة أو مستمعين أو استثناءات جدار الحماية:
winrm quickconfig - النوع y (نعم) إذا طُلب منك إجراء تغييرات أو إنشاء مستمع WinRM جديد.
الحل 2: إزالة حدود MaxShellsPerUser و MaxMemoryPerShellMB
If the remote shell process hits an allocation limit, it may fail to populate the parameters required by the WSManSendShellInput الوظيفة.
- إطلاق PowerShell as an Administrator على كل من العميل والجهاز البعيد (إذا كان متاحاً).
- تحقق من معايير التكوين القائمة عن طريق تشغيل:
Get-Item WSMan:\localhost\Shell\* - زيادة الحد الأقصى للذاكرة لكل قذيفة لضمان أن الكائنات المعقدة لا تتقطع إلى كائنات صفرية:
Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 2048 - زيادة عدد القذائف المسموح بها لكل مستخدم لمنع تعارضات الجلسات المتزامنة:
Set-Item WSMan:\localhost\Shell\MaxShellsPerUser 30 - قم بإعادة تشغيل خدمة WinRM لتطبيق هذه التغييرات على الفور:
Restart-Service winrm
الحل 3: إعادة بناء مستمعين WinRM
إذا كان لدى المستمعين الافتراضيين خصائص فاسدة، يجب عليك حذفها بالكامل وإعادة بناؤها للتأكد من أن معايير واجهة برمجة التطبيقات تتطابق مع مواصفات النظام الأصلية.
- افتح Command Prompt as an administrator.
- عرض مستمعين WinRM النشطين حالياً بتشغيل:
winrm enumerate winrm/config/listener - قم بحذف المستمعين الخاطئين بالكامل باستخدام هذه الأوامر:
winrm delete winrm/config/listener?Address=*+Transport=HTTP(ملاحظة: قم بتغيير HTTP إلى HTTPS إذا كانت البنية التحتية لشبكتك تستخدم WinRM على وجه التحديد عبر SSL).
- إعادة إنشاء البنية التحتية للمستمع من قوالب النظام النظيفة:
winrm quickconfig
الحل 4: إصلاح متغيرات البيئة ومسار النظام
The WinRM sub-system relies heavily on underlying system environment variables to process structural payload schemas. Missing entries like %SystemRoot% يمكن أن يؤدي إلى معايير صفر.
- اضغط على Windows Key + R ، نوع
sysdm.cpl, وأضرب Enter لفتح خصائص النظام. - إبحار إلى Advanced اضغط على التبويب Environment Variables الزر في الأسفل.
- تحت... System variables قسم، تحديد مكان المتغير المسمى Path و انقر Edit.
- Ensure that the following default Windows paths are explicitly listed. If they are missing, click New إضافة لهم:
C:\Windows\system32C:\WindowsC:\Windows\System32\WbemC:\Windows\System32\WindowsPowerShell\v1.0\
- انقر OK على جميع النوافذ لحفظ التغييرات، ثم إعادة تشغيل جهاز الكمبيوتر الخاص بك.
الحل 5: تجنب مؤقتًا SSL أو فحص الشبكة
قد تقوم تطبيقات الأمان أو موازين حمولة الأجهزة بإزالة عناوين مخصصة ، مما يؤدي إلى وصول حجج WSMan API فارغة في النقطة النهائية.
- إذا كنت تستخدم خادم بروكسي، تجاوزه مؤقتاً لعناوين التوجيه المحلية عن طريق تنفيذ هذا في نافذة PowerShell مرتفعة:
$env:no_proxy="localhost,127.0.0.1,your-remote-host-ip" - إذا كانت المشكلة معزولة إلى جهاز مستهدف موثوق به معين، أضفها مباشرة إلى قائمة TrustedHosts للعميل الخاص بك للقضاء على تصفية المصافحة:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "your-remote-host-name-or-IP" -Force - اختبر تسلسل اتصال الغلاف عن بعد مرة أخرى
للمساعدة في تحديد المشكلة بشكل أكبر، هل يمكن أن تقدم بعض التفاصيل:
- هل تتلقى هذا الخطأ أثناء تشغيل specific script أو يحدث ذلك immediately upon connecting?
- ماذا ؟ Windows OS versions يتم تثبيتها على كل من العميل المحلي والضيف البعيد؟
- هل تتصل بشبكة محلية؟ VPN أو من خلال domain controller environment?
قد يكون هناك بعض الأخطاء. Learn Microsoft