我需要比较并合并两个哈希表,但保留特定键的值。
$Left = @{Name = "Alex"; CreationDate = "2018-10-20"; Status = "Married"}
$Right = @{CreationDate = "2019-03-15"; Status = "Divorced"; City = "NY"; Country = "US"}
这两个对象一旦合并,就不能更改名称 ,CreationDate必须保留“ 2001-10-20”,就像在$ Left表中一样,状态需要更新,并且城市和国家应添加到列表中。 以下脚本正在正确更新,添加和保留所有键的值,但它覆盖了我的CreationDate。
这是用于使用Powershell更新某些文件标签。
function New-Result($Key, $Value) {
New-Object -Type PSObject -Property @{
Key = $Key
Value = $Value
}
}
[Object[]]$Results = $Left.Keys | % {
if ($Left.ContainsKey($_) -and !$Right.ContainsKey($_)) {
New-Result $_ $Left[$_]
}
}
$Results += $Right.Keys | % {
if (!$Left.ContainsKey($_) -and $Right.ContainsKey($_) -and ($Right[$_])){
New-Result $_ $Right[$_]
}
}
$Results += $Right.Keys | % {
if ($Left.ContainsKey($_) -and $Right.ContainsKey($_) -and ($Right[$_])) {
New-Result $_ $Right[$_]
}
}
return $Results
我需要为CreationDate键选择$ Left值,但到目前为止无法这样做。
答案 0 :(得分:2)
这是家常便饭,但是可以用。 [咧嘴]
它做什么...
Status
,请使用新值由于哈希表是通过引用传递的,因此可以根据需要将其放入函数中。我不确定这样做是否有意义。我可能会把它循环处理您的收藏夹中的项目。
代码...
$Original = @{
Name = "Alex"
CreationDate = "2018-10-20"
Status = "Married"
}
$Updated = @{
CreationDate = "2019-03-15"
Status = "Divorced"
City = "NY"
Country = "US"
}
foreach ($Key in $Updated.Keys)
{
if ($Key -eq 'Status')
{
$Original[$Key] = $Updated[$Key]
}
if ($Key -notin $Original.Keys)
{
$Original.Add($Key, $Updated[$Key])
}
}
$Original
输出...
Name Value
---- -----
CreationDate 2018-10-20
Status Divorced
Name Alex
City NY
Country US