2016-05-30 6 views
0

Ich versuche ein geordnetes Wörterbuch für ein Powershell-Skript zurückzugeben, das einen Start-Job von einem anderen Skript durchlaufen hat.Receive-Job hält mein Objekt nicht an

Der gerufene Skript eine Variable $ readahead zurückgeben, was diese Art ist:

[DBG]: [Job23]: PS C:\Users\litroma\Documents>> $readahead.GetType() 
IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  OrderedDictionary      System.Object 

Aber sobald diese Variable ist vom Anrufer Skript retreive, aber:

$ret=receive-job -Job $job 

Die $ ret Variable ist dieser Typ:

Kennen Sie einen Weg, meinen [geordneten] Typ durch einen Empfangsjob zu behalten?

TIA

Grüße

Antwort

2

Das Problem hierbei ist, dass die Ergebnisse aus dem externen Prozess, um abholen zu übergeben, die den Auftrag ausführt, ist es die Laufzeitobjekte serialisiert werden muss.

Leider scheint der Serialisierungsprozess jeden Dictionary Typ in einen Hashtable zu verwandeln.

Sie diesen Effekt durch den Export und Re-Import ein ordered Dictionary-Objekt sehen:

PS C:\> [ordered]@{1=1;2=2;3=3} |Export-Clixml ($tmpFile = [System.IO.Path]::GetTempFileName()) 
PS C:\> (Import-Clixml $tmpFile).GetType().FullName 
System.Collections.Hashtable 

ich das nicht denken kann, ohne einige ernsthafte Verlängerung der OrderedDictionary Klasse überwunden werden, so dass der Code weniger wiederverwendbar .

Eine Alternative ist ein Array von Objekten zurück (Arrays sind in der Reihenfolge) und dann die OrderedDictionary neu zu erstellen, nachdem der Job

+0

IMHO Empfang * generisch * ist hier nicht gut Begriff, da 'Hashtable' nicht generische Klasse ist in .NET-Begriffe. – PetSerAl

+0

@PetSerAl wahr, entfernt es, um Verwirrung zu vermeiden –

+0

Danke Mathias für die Tipps. – litroma

Verwandte Themen