Files
Resolve-DSCConfigurationData/Private/Resolve-ConfigurationDataValue.ps1
T

60 lines
1.7 KiB
PowerShell

function Resolve-ConfigurationDataValue {
[CmdletBinding()]
Param(
[AllowNull()]
$Value,
[Parameter(Mandatory=$true)]
$Context,
[object[]]
$Path = @()
)
if($null -eq $Value){
return $null
}
if($Value -is [System.Collections.Specialized.OrderedDictionary]){
$Resolved = [ordered]@{}
foreach($Entry in $Value.GetEnumerator()){
if($Entry.Name -eq "Sealed"){
continue
}
$Resolved[$Entry.Name] = Resolve-ConfigurationDataValue -Value $Entry.Value -Context $Context -Path (@($Path) + @($Entry.Name))
}
return $Resolved
}
if($Value -is [System.Collections.Hashtable]){
$Resolved = @{}
foreach($Entry in $Value.GetEnumerator()){
if($Entry.Name -eq "Sealed"){
continue
}
$Resolved[$Entry.Name] = Resolve-ConfigurationDataValue -Value $Entry.Value -Context $Context -Path (@($Path) + @($Entry.Name))
}
return $Resolved
}
if($Value -is [System.Array] -and $Value -isnot [string]){
$Resolved = @()
for($Index = 0; $Index -lt $Value.Count; $Index++){
$Resolved += ,(Resolve-ConfigurationDataValue -Value $Value[$Index] -Context $Context -Path (@($Path) + @($Index)))
}
return ,$Resolved
}
if($Value -is [string] -and (Test-ConfigurationDataExpression -Value $Value)){
$PreviousPath = @($Context.CurrentPath)
$Context.CurrentPath = @($Path)
try {
return Resolve-ConfigurationDataExpression -Expression $Value -Context $Context
} finally {
$Context.CurrentPath = $PreviousPath
}
}
return $Value
}