Powershell: اكتب - إخراج - لا تعداد مخرجات PSObject [] بدلاً من كائن [] ولا تحترم بشكل عام نوع مجموعة الإدخال

تم إنشاؤها على ١٩ يناير ٢٠١٨  ·  3تعليقات  ·  مصدر: PowerShell/PowerShell

ذات صلة: # 5122

  • Write-Output -NoEnumerate ، عند إعطائه مجموعة ، يقوم دائمًا بإرجاع PSObject[] بدلاً من مصفوفة object[]] ، وهو أمر غير متوقع.

  • بالإضافة إلى ذلك ، هذا يعني أنه إذا تم تمرير نوع مجموعة مختلف مثل [System.Collections.ArrayList] ، فلن يتم الاحتفاظ به.

    • وثائق Write-Output ، التي تنص حاليًا فقط ، "تمنع مخرجات الكتابة من تعداد المخرجات" ، والتي تبدو مثل مجموعة الإدخال - مهما كان نوعها - يتم تجاوزها ببساطة - توقع معقول بأن _Windows PowerShell_ إصدارات تصل إلى v5.1 شرف بالفعل.

أظن أن هذا الانحدار هو نتيجة للعلاقات العامة المشؤومة # 2038 التي نشأت عن القضية رقم 2035.

خطوات التكاثر

(Write-Output -NoEnumerate 1, 2).GetType().Name
(Write-Output -NoEnumerate ([System.Collections.ArrayList] (1, 2))).GetType().Name

سلوك متوقع

Object[]
ArrayList

هذه هي الطريقة التي لا تزال تعمل في _Windows PowerShell_ v5.1

السلوك الفعلي

PSObject[]
PSObject[]

كما ذكر ، يؤثر هذا على PS _Core_ فقط.

بيانات البيئة

PowerShell Core v6.0.0 on macOS 10.13.2
PowerShell Core v6.0.0 on Ubuntu 16.04.3 LTS
PowerShell Core v6.0.0 on Microsoft Windows 10 Pro (64-bit; v10.0.15063)
Issue-Bug Resolution-Fixed WG-Engine

التعليق الأكثر فائدة

كيف سمح لهذا أن يستمر كل هذا الوقت؟

ال 3 كومينتر

إذا كان الانحدار - فهو خطأ.

كيف سمح لهذا أن يستمر كل هذا الوقت؟

Jaykul إصلاح هذا الآن. بعد فترة أطول من اللازم في ملفات خطوط الأنابيب ، اتضح أن كتابة المعلمات على أنها PSObject[] تجبر PS على تعداد أي مجموعة ترميها عليها أثناء مرحلة ربط المعلمة. كتابة المعلمة كـ PSObject تعمل مع كل من الفرديين والمجموعات على ما يرام.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات