@@ -51,7 +51,12 @@ function Set-Config {
5151 Write-Verbose " Found collection input config match for $inputConfigName "
5252 $inputConfigItemValue = $inputConfigItem.Value.Value
5353 $inputConfigItemValueType = $inputConfigItemValue.GetType ().FullName
54- Write-Verbose " Input config item value type: $inputConfigItemValueType "
54+ Write-Verbose " Input config item value type pre-standardization: $inputConfigItemValueType "
55+
56+ # Convert to standard type
57+ $inputConfigItemValue = $inputConfigItemValue | ConvertTo-Json | ConvertFrom-Json
58+ $inputConfigItemValueType = $inputConfigItemValue.GetType ().FullName
59+ Write-Verbose " Input config item value type post-standardization: $inputConfigItemValueType "
5560
5661 $indexString = $indexSplit [1 ].Replace(" `" " , " " ).Replace(" '" , " " )
5762 Write-Verbose " Using index $indexString for input config item $inputConfigName "
@@ -60,11 +65,6 @@ function Set-Config {
6065 # Handle integer index for arrays
6166 Write-Verbose " Handling integer index for array"
6267
63- if (! $inputConfigItemValueType.EndsWith (" []" ) -and ! $inputConfigItemValueType.StartsWith (" System.Collections.Generic.List" )) {
64- Write-Error " Input config item $ ( $inputConfigName ) is not an array, but an index was specified."
65- throw " Input config item $ ( $inputConfigName ) is not an array, but an index was specified."
66- }
67-
6868 $index = [int ]$indexString
6969 if ($inputConfigItemValue.Length -le $index ) {
7070 Write-Verbose " Input config item $ ( $inputConfigName ) does not have an index of $index ."
@@ -73,7 +73,16 @@ function Set-Config {
7373 throw " At least one value is required for input config item $ ( $inputConfigName ) ."
7474 }
7575 } else {
76- $inputConfigItemIndexValue = $inputConfigItemValue [$index ]
76+ try {
77+ $inputConfigItemIndexValue = $inputConfigItemValue [$index ]
78+ } catch {
79+ Write-Verbose " Error accessing index $index for input config item $ ( $inputConfigName ) : $_ "
80+ if ($index -eq 0 ) {
81+ Write-Error " At least one value is required for input config item $ ( $inputConfigName ) ."
82+ throw " At least one value is required for input config item $ ( $inputConfigName ) ."
83+ }
84+ }
85+
7786 if ($null -ne $inputConfigItemIndexValue ) {
7887 $configurationValue.Value.Value = $inputConfigItemIndexValue
7988 continue
@@ -89,12 +98,13 @@ function Set-Config {
8998 # Handle string index for maps
9099 Write-Verbose " Handling string index for map"
91100
92- if (! $inputConfigItemValueType.EndsWith (" PSCustomObject" )) {
93- Write-Error " Input config item $ ( $inputConfigName ) is not a map, but a key was specified."
94- throw " Input config item $ ( $inputConfigName ) is not a map, but a key was specified."
101+ try {
102+ $mapItem = $inputConfigItemValue.PsObject.Properties | Where-Object { $_.Name -eq $indexString }
103+ } catch {
104+ Write-Verbose " Error accessing map item $indexString for input config item $ ( $inputConfigName ) : $_ "
105+ Write-Error " At least one value is required for input config item $ ( $inputConfigName ) ."
106+ throw " At least one value is required for input config item $ ( $inputConfigName ) ."
95107 }
96-
97- $mapItem = $inputConfigItemValue.PsObject.Properties | Where-Object { $_.Name -eq $indexString }
98108 if ($null -ne $mapItem ) {
99109 $inputConfigItemIndexValue = $mapItem.Value
100110 if ($null -ne $inputConfigItemIndexValue ) {
0 commit comments