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