نظرة عامة
تم عمل Fork من u/InternetStranger4You مع بعض التغييرات الكبيرة.
البنية
ينقسم الكود بين وحدتين:
Microsoft.Windows.PSGeneral
- كود غلاف لـ DISM و ReAgentC
- اختبارات موسّعة لإعادة التشغيل المعلقة
- إعادة تحجيم/إعادة بناء تلقائية لقسم Windows RE
Microsoft.Windows.PSMitSec
- يدمج
Microsoft.Windows.PSGeneral
- إعادة محاولة
Add-DismPackage إذا لزم الأمر
- توسيع قسم Windows RE
بالطبع، الوحدات مخصصة لأغراض العرض التوضيحي. إذا كنت ترغب في استخدامها بشكل صحيح، يجب عليك إنشاء ملفات manifest والإشارة إلى التبعيات بشكل مناسب.
التسجيل
يُستخدم PSFramework بدلاً من cmdlets المدمجة.
ملاحظات
- يبدو أن
Add-DismPackage يفشل دائمًا مرة واحدة. رسالة الخطأ نفسها تقول إنه قد يكون خطأً مؤقتًا (مثل حالة سباق لتحديث Service Stack). إعادة المحاولة بعد بضع ثوانٍ تنجح دائمًا.
- تم اقتراح أن هذا قد يكون بسبب الترقيات الموضعية للميزات. لاحظت هذا على تثبيت نظيف من Windows 10 21H2.
- كما ذُكر في قسم البنية، سيقوم هذا البرنامج النصي تلقائيًا بإعادة تحجيم قسم استرداد Windows (WinRE) (إذا تم تحديد ذلك). أعني بـ إعادة التحجيم الحذف وإعادة البناء.
- يتطلب قرصًا بتقسيم GPT. ليس أنك لا تستطيع استخدام MBR، لكنني ببساطة لم أرغب في معرفة كيفية التعامل مع ذلك. معظم الأقراص يجب أن تكون GPT الآن.
- يتطلب وجود قسم WinRE مسبقًا. وذلك لإعادة استخدام ملف Winre.wim الموجود. لا يوجد ملف .wim في أي مكان آخر محليًا. (بالطبع، البرنامج النصي نفسه سيتطلب ملفًا؛ وإلا لن يكون هناك ما يمكن تصحيحه.)
- تنفيذ
Test-PSMitSec_CVE202241099
المهام
مهم
- التحقق من تطبيق التصحيح قبل التحديث.
- إعادة تطبيقه لن تسبب فشلًا.
- قد يستغرق تطبيق التصحيح بضع دقائق. يبدو أن Microsoft Intune يشغّل البرامج النصية أكثر من مرة، لذا فإن هذا سيوفر الوقت.
- عندما يفشل
Add-DismPackage في المرة الأولى، يُخرج كمية كبيرة من نص شريط التقدم (يبدو فوضويًا جدًا). يجب قمعه.
- إضافة معلمة إلى
Resize-WinREPartition لقبول Winre.wim من مصدر بديل (مثل محرك أقراص محمول يحتوي على وسائط التثبيت).
أقل أهمية
- تحسين أسماء المتغيرات/الدوال
- إزالة تهيئات المتغيرات غير الضرورية (أميل إلى كتابة PS كما لو كانت C#)
- نقل بعض المخرجات من Verbose إلى Host