@@ -51,7 +51,12 @@ function Set-Config {
51
51
Write-Verbose " Found collection input config match for $inputConfigName "
52
52
$inputConfigItemValue = $inputConfigItem.Value.Value
53
53
$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 "
55
60
56
61
$indexString = $indexSplit [1 ].Replace(" `" " , " " ).Replace(" '" , " " )
57
62
Write-Verbose " Using index $indexString for input config item $inputConfigName "
@@ -60,11 +65,6 @@ function Set-Config {
60
65
# Handle integer index for arrays
61
66
Write-Verbose " Handling integer index for array"
62
67
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
-
68
68
$index = [int ]$indexString
69
69
if ($inputConfigItemValue.Length -le $index ) {
70
70
Write-Verbose " Input config item $ ( $inputConfigName ) does not have an index of $index ."
@@ -73,7 +73,16 @@ function Set-Config {
73
73
throw " At least one value is required for input config item $ ( $inputConfigName ) ."
74
74
}
75
75
} 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
+
77
86
if ($null -ne $inputConfigItemIndexValue ) {
78
87
$configurationValue.Value.Value = $inputConfigItemIndexValue
79
88
continue
@@ -89,12 +98,13 @@ function Set-Config {
89
98
# Handle string index for maps
90
99
Write-Verbose " Handling string index for map"
91
100
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 ) ."
95
107
}
96
-
97
- $mapItem = $inputConfigItemValue.PsObject.Properties | Where-Object { $_.Name -eq $indexString }
98
108
if ($null -ne $mapItem ) {
99
109
$inputConfigItemIndexValue = $mapItem.Value
100
110
if ($null -ne $inputConfigItemIndexValue ) {
0 commit comments