Diff 哈希表返回值

问题描述

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

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

辅助指标为我提供了所有我感兴趣的指标,但我想要的是返回的哈希表中的值 - 我该怎么做?

更新 1

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

解决方法

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

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

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

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

    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
        }
    }
}