首页 > 解决方案 > diff哈希表返回值

问题描述

我正在做一个比较对象,其中我的 ref 对象是一个字符串列表,而 diff 对象是一个哈希表

Compare-Object -ReferenceObject $localmd5 -DifferenceObject $remotefilehash | Where-Object { ($_.SideIndicator -eq '=>')} 

侧面指示器让我得到了我感兴趣的所有内容,但我想要的是返回的哈希表中的值 - 我该怎么做?

更新 1

问 - 我需要将 localmd5 与哈希表 KEYS 进行比较并返回 VALUES

标签: powershellhashtable

解决方案


为什么不直接将 HashTable 值转换为字符串数组,然后比较它们呢?

  1. 将存储在 HashTable 中的值转换为 String 数组:

    $hashTableValues = $remotefilehash.Values.ForEach('ToString')

  2. 然后,只需比较两个字符串数组 ($localmd5和) 并使用cmdlet$hashTableValues获取您的唯一值:Select-Object

    Compare-Object -ReferenceObject $localmd5 -DifferenceObject $hashTableValues | Where-Object { ($_.SideIndicator -eq '=>')} | Select-Object InputObject

根据您更新的问题:

您可以通过执行以下操作来获取您感兴趣的密钥:

$requiredKeys = Compare-Object -ReferenceObject $localmd5 -DifferenceObject ($remotefilehash.Keys.GetEnumerator() -join ',').Split(' ') | Where-Object { ($_.SideIndicator -eq '=>')} | Select-Object InputObject

然后,您可以将这些键转换为字符串数组:

$keysAsString = $requiredKeys | Foreach {"$($_.InputObject)"}

现在,由于您已经获得了需要值的键列表,您可以将这些键用作索引并从 HashTable 中获取所需的值:

foreach($key in $keysAsString)
{
    foreach($hKey in $remotefilehash.Keys)
    {
        if($hKey.ToString() -eq $key)
        {
            Write-Output $hash[$hKey] #use the value accordingly
        }
    }
}

推荐阅读