Powershell 버전 : 3.0전달 된 개체의 캐스트를 제거하는 Start-Job cmdlet
안녕하세요 동료 스크립터. 내가 답을 찾을 수없는 문제가 있습니다.
요약 : 작업을 시작할 때 scriptblock 매개 변수는 [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"유형의 개체를 만들 수 없습니다. Param1 속성을 System.Collections.Specialized.OrderedDictionary 개체에 대해 찾을 수 없습니다. 가능한 속성이다 : [COUNT], [isReadOnly의] [키], [값], [IsFixedSize], [SyncRoot], [즉 IsSynchronized]
NOTE 없음 키/값 쌍을 통과하지하면 캐스트가 남아 있고 객체가 스크립트 블록으로 잘 전달됩니다 (매개 변수 목록에 캐스트).
사람 세부 정확한 원인 수 또는 시작 - 작업 cmdlet은 무엇을하고 있는가? 나는 직업을 잘못 사용하고 있는가? 이 객체 유형은 작업에서 사용할 수 없습니까? 그것은 시스템 객체이기 때문입니까?
@ 기호를 사용하여 오타를 지적 해 주셔서 감사합니다. 나는 그것을 메인 포스트에서 업데이트했다. 그러나 스크립트 블록에서 "$ ParamIn"을 "write-host $ ParamIn.GetType()"으로 바꾸는 것처럼 의도 한대로 구현되었는지는 확실하지 않지만 개체가 있음을 알리는 오류를 반환합니다 없는. 그래서 나는 목표물이 의도 한대로 일에 넘겨지고 있다고 생각하지 않는다. 그것에 관한 어떤 생각? –