سؤال

هل أحدث إصدار من Powershell لديها القدرة على أن تفعل شيئا مثل جافا سكريبت:

var point = new Object();
point.x = 12;
point.y = 50;

إن لم يكن, ما يعادل أو الحل?

التحديث
اقرأ جميع التعليقات

هل كانت مفيدة؟

المحلول

الجملة ليست دعما مباشرا من خلال وظيفة هناك طريق إضافة-الأعضاء الأمر cmdlet.قبل لحظة ، أنا ملفوفة هذه الوظيفة في الغرض العام tuple وظيفة.

هذا وسوف تعطيك القدرة على سطر واحد خلق هذه الكائنات.

$point = New-Tuple "x",12,"y",50

هنا هو رمز الجديدة-Tuple

function New-Tuple()
{
    param ( [object[]]$list= $(throw "Please specify the list of names and values") )

    $tuple = new-object psobject
    for ( $i= 0 ; $i -lt $list.Length; $i = $i+2)
    {
        $name = [string]($list[$i])
        $value = $list[$i+1]
        $tuple | add-member NoteProperty $name $value
    }

    return $tuple
} 

بلوق وظيفة حول هذا الموضوع: http://blogs.msdn.com/jaredpar/archive/2007/11/29/tuples-in-powershell.aspx#comments

نصائح أخرى

عن طرق بسيطة أولا هو hashtable (متوفر في V1)

$obj = @{}
$obj.x = 1
$obj.y = 2

الثاني, هو PSObject (أسهل في V2)

$obj = new-object psobject -property @{x = 1; y =2}

فهو يوفر لك ما يقرب من نفس الكائن ، ولكن psobjects أجمل إذا كنت ترغب في فرز/المجموعة/تنسيق/تصدير

آسف على الرغم من اختيار إجابة جيدة ، لم أستطع مقاومة hacky سطر واحد الإجابة:

New-Object PsObject | Select-Object x,y | %{$_.x = 12; $_.y = 50; $foo = $_; }

يمكنك أن تفعل ذلك من هذا القبيل:

$point = New-Object Object |
    Add-Member NoteProperty x ([int] 12) -passThru |
    Add-Member NoteProperty y ([int] 15) -passThru

فيما يتعلق واحد من التعليقات الخاصة بك في أماكن أخرى مخصصة الكائنات قد تكون أكثر فائدة من الجداول التجزئة لأنها تعمل على نحو أفضل مع cmdlets أن نتوقع الأشياء أن يكون اسمه خصائص.على سبيل المثال:

$mypoints | Sort-Object y   # mypoints sorted by y-value
$point = "" | Select @{Name='x'; Expression={12}} ,@{Name='y'; Expression={15}}

أو أكثر حدسي

$point = "" | Select x,y
$point.x=12; $point.y=15
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top