Um die beiden Objekte $object1
und $object2
in einem gemeinsamen Objekt $objects
zu speichern, hängt es davon ab, ob man die Daten vertikal oder horizontal zusammenfügen möchte. (JOINING & CONCATENING)
Concatening / Union / vertikal
Um Objekte – vergleichbar mit einem Union zusammenzufügen, gibt es die Möglichkeit unter Verwendung des Operator ,:
Der Operator ,
erzeugt in diesem Fall ein Array, das beide Objekte enthält. Die Variable $objects
wird dann diesem Array zugewiesen, so dass sie beide Objekte enthält.
# Erstes Objekt | |
$object1 = New-Object PSObject -Property @{ | |
Name = "John" | |
Age = 30 | |
} | |
# Zweites Objekt | |
$object2 = New-Object PSObject -Property @{ | |
Name = "John2" | |
Age = 39 | |
} | |
# Objekte zusammenführen | |
$objects = $object1, $object2 | |
# Ausgabe | |
$objects |
Joining / Join / Horizontal
Etwas komplizierter ist das Joining von Daten in Powershell.
# JSON-Daten | |
$myJSON1 = '[ | |
{ | |
"Name": "John", | |
"Age": 30 | |
}, | |
{ | |
"Name": "John2", | |
"Age": 39 | |
} | |
]' | |
# JSON-Daten | |
$myJSON2 = '[ | |
{ | |
"Name": "John", | |
"City": "New York" | |
}, | |
{ | |
"Name": "John2", | |
"City": "Graz" | |
} | |
]' | |
# PowerShell-Objekte erstellen | |
$myObject1 = ConvertFrom-Json $myJSON1 | |
$myObject2 = ConvertFrom-Json $myJSON2 | |
# INNER JOIN-Operation ausführen | |
$result = $myObject1 | ForEach-Object { | |
$name = $_.Name | |
$match = $myObject2 | Where-Object { $_.Name -eq $name } | |
if ($match) { | |
[pscustomobject] @{ | |
Name = $name | |
Age = $_.Age | |
City = $match.City | |
} | |
} | |
} | |
# Ausgabe | |
$result |
In diesem Beispiel wird die JSON-Textzeichenfolge in der Variable $myJSON1
und $myJSON2
definiert. Die JSON-Textzeichenfolgen werden dann durch das ConvertFrom-Json
Cmdlet in PowerShell-Objekte $myObject1
und $myObject2
umgewandelt.
Die ForEach-Object
-Schleife wird dann verwendet, um jedes Objekt in $myObject1
zu durchlaufen. Innerhalb dieser Schleife wird das Where-Object
Cmdlet verwendet, um jedes Objekt in $myObject2
zu durchlaufen, das denselben Namen hat wie das aktuelle Objekt in $myObject1
.
Wenn ein passendes Objekt gefunden wurde, wird ein neues Objekt erstellt, das alle Eigenschaften aus beiden ursprünglichen Objekten enthält. Das neue Objekt wird der Ergebnisliste $result
hinzugefügt.
Die Ausgabe des Ergebnisses sieht folgendermaßen aus: