internal/functions/Set-AVDMFStageEntries.ps1
function Set-AVDMFStageEntries { <# .SYNOPSIS This function replaces "Stages" token in json objects depending on the current stage or a default one. .Example $json = @" { "SampleProperty": { "Stage": { "Development": 10, "Production": 5, "Default": 15 } } } "@ $dataset = $json | ConvertFrom-Json | ConvertTo-PSFHashtable Set-AVDMFStageEntries -Dataset $dataset Assuming the current stage name is "Development", the output will be that SampleProperty = 10 #> [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [Hashtable] $Dataset, [string] $DeploymentStage = $script:DeploymentStage, [string] $StageToken = "DeploymentStage" ) foreach ($key in ([array]$Dataset.Keys)) { # If the properties contains a Stage Token (Typically "DeploymentStage") if ($Dataset[$key].$StageToken) { $configuredStages = ($Dataset[$key].$StageToken | Get-Member -MemberType NoteProperty).Name if ( $configuredStages -contains $DeploymentStage) { $Dataset[$key] = $Dataset[$key].$StageToken.($DeploymentStage) Write-PSFMessage -Level Verbose -Message "Set $key to $DeploymentStage value: $($Dataset[$key])" } elseif ( $configuredStages -contains "Default" ){ $Dataset[$key] = $Dataset[$key].$StageToken.Default Write-PSFMessage -Level Verbose -Message "Set $key to Default value: $($Dataset[$key])" } else { throw "Could not resolve stage value ($DeploymentStage) for `r`n $($Dataset | Out-String)" } } } #$Dataset } |