PowerShell中Where-Object过滤哈希表无返回结果问题
PowerShell中Where-Object过滤哈希表无返回结果的原因
- 你定义的
$controlFlowArgs是哈希表(Hashtable)类型,直接通过管道传递时,传输的是整个哈希表对象,而非内部的单个键值对条目。 Format-Table、Format-List这类格式化cmdlet对哈希表做了特殊适配,会自动展开显示所有键值对,所以你能看到waitForEnter的输出,但这不代表管道中传输的是拆分后的键值对。- 整个哈希表对象本身不存在
Name属性,所以Where-Object的过滤条件$_.Name -eq "waitForEnter"永远为假,自然没有返回结果。
解决方法
方法1:枚举哈希表条目后过滤
如果需要通过Where-Object筛选键值对,先调用哈希表的GetEnumerator()方法枚举所有条目,再执行过滤:
$result = $controlFlowArgs.GetEnumerator() | Where-Object -FilterScript { $_.Name -eq "waitForEnter" }
方法2:直接按键取值(更推荐)
如果只是要获取指定键对应的值,不需要过滤,直接用哈希表索引或属性语法即可,性能更高:
# 索引语法 $waitForEnterValue = $controlFlowArgs["waitForEnter"] # 属性语法 $waitForEnterValue = $controlFlowArgs.waitForEnter
内容的提问来源于stack exchange,提问作者TugboatCaptain
相关产品推荐
相关产品推荐

