powershell - diff哈希表返回值
问题描述
我正在做一个比较对象,其中我的 ref 对象是一个字符串列表,而 diff 对象是一个哈希表
Compare-Object -ReferenceObject $localmd5 -DifferenceObject $remotefilehash | Where-Object { ($_.SideIndicator -eq '=>')}
侧面指示器让我得到了我感兴趣的所有内容,但我想要的是返回的哈希表中的值 - 我该怎么做?
更新 1:
问 - 我需要将 localmd5 与哈希表 KEYS 进行比较并返回 VALUES
解决方案
为什么不直接将 HashTable 值转换为字符串数组,然后比较它们呢?
将存储在 HashTable 中的值转换为 String 数组:
$hashTableValues = $remotefilehash.Values.ForEach('ToString')
然后,只需比较两个字符串数组 (
$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
}
}
}
推荐阅读
- azure-active-directory - Azure AD B2C 会话超时无效
- pandas - 熊猫与 numpy 不兼容
- visual-studio - Ctrl+Shift+右箭头在 Visual Studio 2019 中不起作用
- spring - 使用 Spring 在非 Web 应用程序中使用 ElasticSearch 客户端
- foreach - 使用 ForEach 时,在 SwiftUI 中选择时是否可以更改 tabItem 的图像?
- apache-flink - Flink 中的检查点随时间增加
- javascript - Javascript- 使 JSON 排序函数可扩展为 Date 对象
- python - 读取使用 O_DIRECT 标志打开的文件
- django - Django:多对多关系将模型中的所有对象放在另一个对象中
- security - 使用 TPM2 安全地存储密钥