【发布时间】:2017-03-03 14:25:45
【问题描述】:
我注意到在 PowerShell 5.0 中使用作业时出现了奇怪的行为。
运行返回PSObject 的作业也返回一些哈希表。
返回字符串、整数等的作业可以正常工作。
跑步
Start-Job { New-Object PSObject -Property @{ A = 1 } } |
Receive-Job -Wait -AutoRemoveJob
返回
一:1 运行空间 ID:6921e85f-301e-4e95-8e4b-c0882fc2085f PSSourceJobInstanceId : 2992ef77-5642-4eac-8617-f26449a87801
跑步
Start-Job { New-Object PSObject } | Receive-Job -Wait -AutoRemoveJob
返回
@{PSComputerName=localhost;运行空间 ID=3e783d5f-254a-4951-bb4a-7ff6fa2812c5; PSShowComputerName=假; PSSourceJobInstanceId=1d951dec-0823-4cde-8219-4a6263550441}
但是,正在运行
Start-Job { ,@(New-Object PSObject -Property @{ A = 1 }) } |
Receive-Job -Wait -AutoRemoveJob
返回
一个 - 1
为什么Receive-Job cmdlet 只为PSObjects 添加该哈希表?
更新:在 PowerShell 4.0 中相同。
【问题讨论】:
-
FWIW,它对 PSCustomObject 的行为相同:
Start-Job { [PSCustomObject]@{A=1} } | Receive-Job -Wait -AutoRemoveJob -
@PetSerAl,我没有意识到它还会为整数和字符串添加注释属性。你能把它写成答案吗?
-
@PetSerAl:很好的指点,谢谢。但是,我不认为
.ToString()被调用(至少不是直接在对象上),并且有 3 组 3-5 个与远程处理相关的属性会触发这种格式(如果它们是唯一的属性)。我已经发布了我的发现作为答案 - 如果我有什么问题,请在那里告诉我。 -
@PetSerAl:知道了,再次感谢;
.PSObject.ToString()的.PSObject部分是缺失的拼图 - 答案已更新。 (如果有什么要补充/更正的,请评论那里)。 -
如果某个答案解决了您的问题,请点击旁边的大复选标记 (✓) 接受它,并可选择对其进行投票(投票至少需要 15 个声望点)。如果您发现其他答案有帮助,请给他们投票。接受和投票有助于未来的读者。请参阅the relevant help-center article。如果您的问题尚未完全得到解答,请提供反馈。如果您认为自己找到了最佳解决方案,请将其发布为答案并自我接受。
标签: powershell jobs psobject