Frage

Ist die neueste Version von Powershell hat die Fähigkeit, so etwas wie JavaScript ist zu tun:

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

Wenn nicht, was ist das Äquivalent oder Abhilfe?

UPDATE
Alle Kommentare lesen

War es hilfreich?

Lösung

Die Syntax nicht direkt von der Funktionalität unterstützt wird, ist über die Add-Mitglied Cmdlets ist da. Vor einiger Zeit habe ich vor, diese Funktionalität in einer Funktion für allgemeine Zwecke Tupel gewickelt.

Dies gibt Ihnen die Möglichkeit, eine Linie, die diese Objekte erstellen.

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

Hier ist der Code für New-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
} 

Blogbeitrag zum Thema: http://blogs.msdn.com/jaredpar/archive/2007/11/29/tuples-in-powershell.aspx#comments

Andere Tipps

Für einfache Möglichkeiten, erstens ist es, eine Hash-Tabelle (erhältlich in V1)

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

Zweitens ist ein PSObject (einfacher in V2)

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

Es gibt Ihnen in etwa das gleiche Objekt, aber psobjects sind schöner, wenn Sie sortieren möchten / Gruppe / Format / exportieren

Es tut uns Leid, auch wenn die gewählte Antwort gut ist, konnte ich nicht die Hacky eine Zeile Antwort widerstehen:

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

Sie können es tun, wie folgt:

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

Im Hinblick auf einem Ihren Kommentar an anderer Stelle, benutzerdefinierte Objekte als Hash-Tabellen nützlicher sein können, weil sie besser arbeiten mit Cmdlets, die Objekte erwarten benannte Eigenschaften haben. Zum Beispiel:

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

oder intuitive

$point = "" | Select x,y
$point.x=12; $point.y=15
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top