PowerShell中DictionaryEntry的.value与.values调用差异及解决方法
PowerShell DictionaryEntry 集合取值差异问题解答
差异产生原因
- PowerShell默认会对单元素返回结果做自动解包:当脚本仅返回1个DictionaryEntry对象时,返回值就是单个DictionaryEntry实例,该实例本身仅提供
Value属性获取对应值,因此可以直接通过var.value读取。 - 当返回结果包含2个及以上DictionaryEntry对象时,PowerShell会返回集合类型的结果,集合本身没有
Value属性,仅提供包含所有键对应值的Values属性,因此需要调用var.values获取所有值。
单命令统一适配方案
使用PowerShell内置的@()数组子表达式运算符强制将返回结果转为数组,搭配PowerShell 3.0及以上版本默认支持的成员枚举特性,即可统一用Value属性读取所有值,无需判断元素数量:
# @() 强制包裹返回结果为数组,兼容1个/多个元素场景 $dictResults = @(你的脚本返回的DictionaryEntry集合) $allValues = $dictResults.Value
如果需要兼容PowerShell 2.0等更低版本,可以用管道方式统一处理:
$allValues = 你的脚本返回的DictionaryEntry集合 | ForEach-Object { $_.Value }
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

