البرمجة

تأثير تغيير Powershell 5 على الأقواس السندية

تأثير التغيير في Powershell 5 على معنى الأقواس السندية

تم تحديث إصدار Powershell على خوادم البناء الخاصة بنا من الإصدار 4.0 إلى 5.0 مما تسبب في فشل أحد سكربتات البناء لدينا بطريقة غير متوقعة.

الشيفرة تُستخدم لتحديد أيه من أدلة المستخدم يجب أن تكون متضمنة في منتجنا. الشيفرة تقوم بمعالجة قائمة من عقد xml التي تصف جميع المستندات المتاحة بالإصدار والثقافة. نحن نقوم بتجميعها حسب عنوان المستند والثقافة ومن ثم نختار الإصدار الأنسب.

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

تم حل المشكلة عن طريق تغيير

powershell
$documents = $documents | Group-Object { $_.ows_Title, $_.ows_Localisation } |

إلى

powershell
$documents = $documents | Group-Object ows_Title, ows_Localisation |

الآن أنا أفهم أن الصيغة الأولى ليست تقنياً صحيحة وفقًا للتوثيق لأن Group-Object يتوقع مصفوفة من أسماء الخصائص للتجميع عليها، ومع ذلك في Powershell 4، عملت الشيفرة كما هو مطلوب.

السؤال الآن ما الذي تغير في Powershell 5 حتى عملت الشيفرة الأصلية في Powershell 4 ولكنها فشلت في Powershell 5.

المزيد من المعلومات

في Powershell 5، تم تحسين عملية تحليل الأقواس السندية لتكون أكثر صرامة وفقًا للتوثيق. في الإصدارات السابقة من Powershell، كان بإمكان تحديد قائمة من الخصائص داخل الأقواس السندية دون استخدام أقواس مجمعة. ولكن في Powershell 5، يُفهم استخدام الأقواس السندية على أنها تعبير عن قائمة متعددة العناصر.

بمعنى آخر، في Powershell 4، كان بإمكانك استخدام الأقواس السندية لتحديد مجموعة من الخصائص كما هو موضح في الكود الأصلي الذي قدمته. ولكن في Powershell 5، يُفسر استخدام الأقواس السندية على أنها تعبير عن مصفوفة واحدة تحتوي على عناصر منفصلة.

بالتالي، عندما استخدمت الأقواس السندية في Powershell 5 بالطريقة التي كنت تستخدمها في Powershell 4، تم تفسيرها على أنها تعبير عن مصفوفة واحدة تحتوي على عنصر واحد فقط (العناصر المجمعة). وهذا هو السبب في أن الشيفرة الأصلية فشلت في العمل كما هو متوقع في Powershell 5.

زر الذهاب إلى الأعلى