2016-05-30 14 views
0

他のスクリプトから開始ジョブを実行したpowershellスクリプトに対して、順序付けられた辞書を返そうとしています。Receive-Jobはオブジェクトの順序を保持しません

と呼ばれるスクリプトは、その型である、変数$先読みを返す:

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

しかし、この変数一度ただし、呼び出し元スクリプトから盗んである:

$ret=receive-job -Job $job 

$ retを変数がありますそのタイプ:

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

[受注]タイプを受信ジョブで保持する方法をご存知ですか?

TIA

よろしく

答えて

2

ここでの問題は、ジョブを実行する外部プロセスからの結果を拾う合格するためには、ランタイムオブジェクトをシリアル化する必要があるということです。

残念ながら、シリアル化プロセスでは、DictionaryタイプはHashtableになります。

あなたがエクスポートしordered辞書オブジェクトを再インポートすることで、この効果を見ることができます:私は、これはいくつかの深刻なコードが少なく、再利用可能な作り、OrderedDictionaryクラスの拡張せずに克服することができるとは思わない

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 

代替がオブジェクトの配列を返します(配列が順序付けられている)、その後

+0

私見ジョブを受信した後OrderedDictionaryを再作成することですHashtable'はジェネリッククラスではありません '以来、*ジェネリック*は、ここで良い用語ではありません.NET用語。 – PetSerAl

+0

@PetSerAl true、混乱を避けるために削除しました –

+0

ヒントのマティアスに感謝します。 – litroma

関連する問題