【发布时间】:2012-02-20 04:15:08
【问题描述】:
似乎调用 Powershell 脚本块(通过调用 .Invoke() 方法)总是会产生一个集合。具体来说,一个类型的集合
System.Collections.ObjectModel.Collection`1[[System.Management.Automation.PSObject, System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]
即使调用空脚本块 ({}.Invoke()) 也会返回一个集合。使用调用运算符 (&) 调用相同的脚本块会产生正常预期的返回值(标量或 [object[]])。
如果您需要一个集合而不是数组,这会很方便,但它似乎有点违反直觉。
有谁知道它为什么会这样?
编辑:
通过阅读语言规范,我知道有两种不同的调用,.Invoke() 和 .InvokeReturnAsIs()。那是我第一次注意到它。
我只是不明白命名约定背后的原因以及它的机制似乎工作的方式。查看文档,我认为默认调用方法不是在 Powershell 中调用脚本块时使用的方法。似乎.InvokeReturnAsIs() 只是返回一个对象流,然后如果有多个对象,Powershell 会将其包装到一个对象数组中,如果只有一个对象则为标量,如果没有则创建一个空对象,就好像有那里有一个隐式管道。使用.Invoke() 总是返回一个集合,而Powershell 将其保留为一个集合。
【问题讨论】:
标签: powershell powershell-2.0 rationale