Powershell 版本:3.0
各位编剧你好。我有一个问题,我似乎无法找到答案。
摘要:尝试开始工作时,脚本块参数正在删除 [System.Collections.Specialized.OrderedDictionary] 的演员表并将其替换为 [Hashtable] (也就是说,如果我不转换脚本块的参数)。我的场景示例如下:
$Job = Start-Job -ScriptBlock {
param(
[System.Collections.Specialized.OrderedDictionary]$Params = $(throw "Please pass Params.")
)
} -Name "Execute" -ErrorVariable Errors -ErrorAction Stop -ArgumentList $Params
当尝试将 OrderedDictionary 对象传递给其中包含键/值对的作业时,它就像传递一个具有比该对象类型预期的更多属性的对象:
$Params = [ordered]@{ "Param1" = "Value1"; "Param2" = "Value2" }
我正在使用以下行来执行我的工作:
$ret = Receive-Job $job -Wait -AutoRemoveJob
结果:
错误:无法处理参数“Params”的参数转换。无法创建“System.Collections.Specialized.OrderedDictionary”类型的对象。找不到 System.Collections.Specialized.OrderedDictionary 对象的 Param1 属性。可用的属性是: [Count ] 、 [IsReadOnly ] 、 [Keys ] 、 [Values ] 、 [IsFixedSize ] 、 [SyncRoot ] 、 [IsSynchronized ]
注意:当不传递键/值对时,强制转换仍然存在,并且对象可以很好地传递到脚本块(在参数列表中使用强制转换)。
谁能详细说明确切的原因或 Start-Job cmdlet 正在做什么?我只是用错了工作吗?这种对象类型不能在工作中使用吗?是因为它是一个系统对象吗?