Utilities/Merge-ExpressionProviders.ps1
function Merge-ExpressionCacheProviders { [CmdletBinding()] param( [System.Collections.IDictionary]$Defaults, [System.Collections.IDictionary]$Overrides, [switch]$Replace ) if ($Replace -or -not $Defaults -or $Defaults.Count -eq 0) { return Validate-ExpressionCacheProviders -Providers $Overrides } # Start with a copy of the defaults (ordered) $merged = [ordered]@{} foreach ($key in $Defaults.Keys) { $merged[$key] = $Defaults[$key] } if ($Overrides) { foreach ($key in $Overrides.Keys) { if ($merged.Contains($key)) { $base = $merged[$key] $override = $Overrides[$key] $mergedValue = Merge-ObjectDeep -Base $base -Override $override if ($base.Config -or $override.Config) { $mergedValue.Config = Merge-ExpressionCacheConfig -Base $base.Config -Override $override.Config } $merged[$key] = $mergedValue } else { $merged[$key] = $Overrides[$key] } } } return Validate-ExpressionCacheProviders -Providers $merged } |