PowerShell Deep Clone and Recursive Merge of Hashtables
PowerShell
function Merge-DeepObject {
param(
[Parameter(Mandatory)][hashtable]$Base,
[Parameter(Mandatory)][hashtable]$Overlay
)
$clone = $Base | ConvertTo-Json -Depth 32 | ConvertFrom-Json -AsHashtable
foreach ($key in $Overlay.Keys) {
$value = $Overlay[$key]
if ($clone[$key] -is [hashtable] -and $value -is [hashtable]) {
$clone[$key] = Merge-DeepObject -Base $clone[$key] -Overlay $value
} else {
$clone[$key] = $value
}
}
return $clone
}