PowerShell脚本块Invoke返回集合而非Int32如何解决
根本原因
PowerShell 脚本块(ScriptBlock)的Invoke()方法默认会将所有返回结果包裹在Collection<PSObject>类型中返回,无论脚本块内部返回的是单个值还是数组,这就是你得到集合类型而非预期Int32的原因。
修复方案
有两种通用方案都可以满足「不需要手动取[0]、同时保留Getter返回数组的原始结构」的需求:
- 使用
InvokeReturnAsIs()方法替代Invoke()
这个方法会直接返回脚本块的原始输出,不会额外包裹集合:
$property = @{ Getter = { 80 }; } # 替换原有的Invoke调用 $value = $property.Getter.InvokeReturnAsIs() $value.GetType() # 输出Name = Int32
测试验证:
- 当Getter返回单个值时,
$value.GetType()会返回预期的Int32类型 - 当Getter返回数组时,
$value会是原始返回的数组类型,没有额外嵌套层级
- 使用
&调用操作符执行脚本块
如果需要兼容低版本PowerShell,可以用调用操作符执行脚本块,同样返回原始结果:
$value = & $property.Getter
内容的提问来源于stack exchange,提问作者Wouter de Kort
相关产品推荐
相关产品推荐

