Angenommen, ich habe ein Array von Hashes in v3 Powershell:Wie kann ich ein Array von PSCustomObjects aus einem Array von Hashes in Powershell v3 generieren?
> $co = [PSCustomObject] $hashes[0]
> $co | ft -AutoSize
Value Name
----- ----
1 Item 1
> $co.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True False PSCustomObject System.Object
So weit, so gut:
> $hashes = 1..5 | foreach { @{Name="Item $_"; Value=$_}}
ich einen einzelnen Hash in ein PSCustomObject
wie diese umwandeln kann. Das Problem tritt auf, wenn ich versuche, die gesamte Hash-Array in PSCustomObjects
in einer Pipeline zu konvertieren:
> ($hashes | foreach { [PSCustomObject] $_})[0].getType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Hashtable System.Object
Wie Sie sehen, ich bin eine Reihe von Hashtable
Objekte bekommen, nicht PSCustomObjects
. Warum bekomme ich ein unterschiedliches Verhalten und wie kann ich erreichen, was ich will?
Danke.
Ja, die [hashtable] Besetzung macht den Trick. Ich würde gerne wissen, warum das nötig ist. – David
Ich habe dies aus der Dokumentation ausgegraben und es könnte einen Hinweis geben: Ein Basisobjekt vom Typ PSCustomObject teilt der Windows PowerShell-Laufzeit mit, dass das einkapselnde PSObject-Objekt kein sinnvolles Basisobjekt hat. Dieser Typ des kapselnden PSObject-Objekts bietet jedoch einen Typnameneigenschaften-Bag, dem Cmdlet-Entwickler erweiterte Member hinzufügen können. Entwickler können auch den Typnamen des Objekts angeben, wodurch dieses Objekt seine erweiterten Member mit anderen PSObject-Objekten desselben Typs teilen kann. –
Ich bekomme andere Ergebnisse, wenn ich Data = "$ _" setze. Es scheint, Zeichenfolgen anders als Ints anzuzeigen. –