PowerShell获取HashSet比对后对应Hashtable键值的方法求助
解决方法
你可以直接遍历$remotefilehash的键值对集合,筛选时判断key不在本地哈希集中,同时保留完整的键值信息即可,有两种常用实现方式:
方式1:输出自定义对象同时保留键和值
$diffItems = $remotefilehash.GetEnumerator().Where({ -not $localHashSet.Contains($_.Key) }) | Select-Object Key,Value
- 这里调用哈希表的
GetEnumerator()方法获取所有键值对枚举 - 筛选后得到的
$diffItems每个元素都包含Key(匹配到的差异哈希key)和Value(对应的值)属性 - 如果你需要直接得到新的差异哈希表,可以改成下面的写法
方式2:直接生成新的差异哈希表
$diffHash = @{} foreach ($key in $remotefilehash.Keys) { if (-not $localHashSet.Contains($key)) { $diffHash[$key] = $remotefilehash[$key] } }
- 生成的
$diffHash就是仅包含本地不存在的key的完整哈希表,你可以直接通过key索引读取对应的值,也可以遍历获取所有键值对
补充说明
如果你已经提前拿到了$diffmd5的key集合,也可以直接遍历这个集合去取对应的值:
$diffWithValue = $diffmd5 | ForEach-Object { [PSCustomObject]@{ HashKey = $_ HashValue = $remotefilehash[$_] } }
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

