function New-ConfigurationDataResolutionContext { [CmdletBinding()] Param( [Parameter(Mandatory=$true)] [System.Collections.Hashtable] $ConfigurationData ) $Context = [PSCustomObject]@{ Parameters = @{} Variables = @{} VariableDefinitions = @{} ResolvingVariables = @{} } if($ConfigurationData.ContainsKey("Parameters") -and $null -ne $ConfigurationData.Parameters){ foreach($Entry in $ConfigurationData.Parameters.GetEnumerator()){ $Definition = $Entry.Value $HasExplicitValue = (Test-ConfigurationDataMap -Value $Definition) -and (Test-ConfigurationDataMapContainsKey -Map $Definition -Key "Value") $HasDefaultValue = (Test-ConfigurationDataMap -Value $Definition) -and (Test-ConfigurationDataMapContainsKey -Map $Definition -Key "DefaultValue") if($HasExplicitValue){ $Context.Parameters[$Entry.Name] = Get-ConfigurationDataMapValue -Map $Definition -Key "Value" }elseif($HasDefaultValue){ $Context.Parameters[$Entry.Name] = Get-ConfigurationDataMapValue -Map $Definition -Key "DefaultValue" }else{ $Context.Parameters[$Entry.Name] = $Definition } if(Test-ConfigurationDataMap -Value $Definition){ Assert-ConfigurationDataParameter -Name $Entry.Name -Definition $Definition -Value $Context.Parameters[$Entry.Name] -HasValue:($HasExplicitValue -or $HasDefaultValue) } } } if($ConfigurationData.ContainsKey("Variables") -and $null -ne $ConfigurationData.Variables){ foreach($Entry in $ConfigurationData.Variables.GetEnumerator()){ $Context.VariableDefinitions[$Entry.Name] = $Entry.Value } } return $Context }