Receive-Job 没有让我的对象保持有序
Receive-Job does not keep my object ordered
我正在尝试 return 一个 powershell 脚本的有序字典 运行 通过另一个脚本的启动作业。
调用的脚本return一个变量$readahead,类型为:
[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
此致
这里的问题是,为了传递从执行作业的外部进程中获取的结果,它需要序列化运行时对象。
不幸的是,序列化过程似乎将任何 Dictionary
类型转换为 Hashtable
。
您可以通过导出并重新导入 ordered
字典对象来查看此效果:
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
我认为如果不对 OrderedDictionary
class 进行一些认真的扩展,这将无法克服,从而降低代码的可重用性。
另一种方法是 return 对象数组(数组是有序的),然后在收到作业后重新创建 OrderedDictionary
我正在尝试 return 一个 powershell 脚本的有序字典 运行 通过另一个脚本的启动作业。
调用的脚本return一个变量$readahead,类型为:
[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
此致
这里的问题是,为了传递从执行作业的外部进程中获取的结果,它需要序列化运行时对象。
不幸的是,序列化过程似乎将任何 Dictionary
类型转换为 Hashtable
。
您可以通过导出并重新导入 ordered
字典对象来查看此效果:
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
我认为如果不对 OrderedDictionary
class 进行一些认真的扩展,这将无法克服,从而降低代码的可重用性。
另一种方法是 return 对象数组(数组是有序的),然后在收到作业后重新创建 OrderedDictionary