Structs oder Objekte in Powershell 2
-
22-07-2019 - |
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
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
Wie ein Objekt in Powershell
erstellen
http: //blogs.msdn.com/powershell/archive/2009/03/11/how-to-create-an-object-in-powershell.aspx
$point = "" | Select @{Name='x'; Expression={12}} ,@{Name='y'; Expression={15}}
oder intuitive
$point = "" | Select x,y
$point.x=12; $point.y=15