Enhance configuration data handling with new reference resolution functions, dummy secret support, and update module version to 1.1.0
This commit is contained in:
61
Private/Get-ConfigurationDataPathValue.ps1
Normal file
61
Private/Get-ConfigurationDataPathValue.ps1
Normal file
@@ -0,0 +1,61 @@
|
||||
function Get-ConfigurationDataPathValue {
|
||||
[CmdletBinding()]
|
||||
Param(
|
||||
[Parameter(Mandatory=$true)]
|
||||
[AllowNull()]
|
||||
$Value,
|
||||
|
||||
[Parameter(Mandatory=$true)]
|
||||
[string]
|
||||
$Path
|
||||
)
|
||||
|
||||
if([string]::IsNullOrWhiteSpace($Path)){
|
||||
throw "Configuration data reference path must not be empty."
|
||||
}
|
||||
|
||||
$Current = $Value
|
||||
$Segments = @($Path -split '\.')
|
||||
|
||||
foreach($Segment in $Segments){
|
||||
if([string]::IsNullOrWhiteSpace($Segment)){
|
||||
throw "Configuration data reference path [$Path] contains an empty segment."
|
||||
}
|
||||
|
||||
if($null -eq $Current){
|
||||
throw "Configuration data reference path [$Path] was not found. Segment [$Segment] resolved from a null value."
|
||||
}
|
||||
|
||||
if($Current -is [System.Collections.IDictionary]){
|
||||
if(-not $Current.Contains($Segment)){
|
||||
throw "Configuration data reference path [$Path] was not found. Segment [$Segment] is missing."
|
||||
}
|
||||
|
||||
$Current = $Current[$Segment]
|
||||
continue
|
||||
}
|
||||
|
||||
if($Current -is [System.Array] -and $Current -isnot [string]){
|
||||
$Index = 0
|
||||
if(-not [int]::TryParse($Segment, [ref]$Index)){
|
||||
throw "Configuration data reference path [$Path] expected a numeric array index at segment [$Segment]."
|
||||
}
|
||||
|
||||
if($Index -lt 0 -or $Index -ge @($Current).Count){
|
||||
throw "Configuration data reference path [$Path] array index [$Index] is out of range."
|
||||
}
|
||||
|
||||
$Current = @($Current)[$Index]
|
||||
continue
|
||||
}
|
||||
|
||||
$Property = $Current.PSObject.Properties[$Segment]
|
||||
if($null -eq $Property){
|
||||
throw "Configuration data reference path [$Path] was not found. Property [$Segment] is missing."
|
||||
}
|
||||
|
||||
$Current = $Property.Value
|
||||
}
|
||||
|
||||
return $Current
|
||||
}
|
||||
Reference in New Issue
Block a user