PowerShell中使用-contains检测哈希表进程ID返回false问题求助
为什么
$processId -contains 5068返回false? 这问题的核心是对PowerShell里哈希表(Hashtable)和-contains运算符的作用逻辑理解偏差了。
问题根源
当你对哈希表使用-contains时,PowerShell会检查这个哈希表的键(Keys)是否包含指定值,而不是检查哈希表的值(Values)。如果你的$processId是哈希表,且5068是哈希表中的值而非键,那$processId -contains 5068自然会返回false——因为它在找键,不是值。
验证与解决步骤
先确认哈希表的结构
先执行以下命令看看你的哈希表到底存了什么:# 查看哈希表的所有键 $processId.Keys # 查看哈希表的所有值 $processId.Values执行后你就能清楚看到5068是键还是值了。
正确检查值是否存在
如果5068是哈希表的值,你需要针对Values集合使用-contains:$processId.Values -contains 5068这样就能得到预期的
true结果。如果需要数组而非哈希表
如果你本来就想把进程ID存成数组(这样直接用-contains就没问题),可以把哈希表的值提取出来转成数组:$processIdArray = $processId.Values | Select-Object -Unique # 现在用-contains就正常了 $processIdArray -contains 5068特殊情况:哈希表是嵌套结构
如果你的SQL查询返回的哈希表是嵌套的(比如每个键对应一个包含进程ID的对象),那你需要先提取出所有进程ID再检查:# 假设哈希表的值是带Id属性的对象 $processId.Values.Id -contains 5068
内容的提问来源于stack exchange,提问作者Weizhong
相关产品推荐
相关产品推荐

