似乎调用 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将其包装到一个对象数组中,如果只有一个对象则为标量,如果没有则创建一个空对象,就好像有一个隐式管道那里。Using.Invoke()
总是返回一个集合,而 Powershell 将其保留为一个集合。