Skip to content

Commit 32b1f7b

Browse files
committed
Fix dynamic parameter conflict issue.
1 parent edbef15 commit 32b1f7b

File tree

1 file changed

+19
-30
lines changed

1 file changed

+19
-30
lines changed

src/Resources/ResourceManager/Utilities/TemplateUtility.cs

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -144,51 +144,41 @@ private static RuntimeDefinedParameterDictionary ParseTemplateAndExtractParamete
144144
}
145145
if (templateParameterObject != null)
146146
{
147-
UpdateParametersWithObject(dynamicParameters, templateParameterObject);
147+
UpdateParametersWithObject(staticParameters, dynamicParameters, templateParameterObject);
148148
}
149149
if (templateParameterFilePath != null && FileUtilities.DataStore.FileExists(templateParameterFilePath))
150150
{
151151
var parametersFromFile = ParseTemplateParameterFileContents(templateParameterFilePath);
152-
UpdateParametersWithObject(dynamicParameters, new Hashtable(parametersFromFile));
152+
UpdateParametersWithObject(staticParameters, dynamicParameters, new Hashtable(parametersFromFile));
153153
}
154154
if (templateParameterFilePath != null && Uri.IsWellFormedUriString(templateParameterFilePath, UriKind.Absolute))
155155
{
156156
var parametersFromUri = ParseTemplateParameterContent(GeneralUtilities.DownloadFile(templateParameterFilePath));
157-
UpdateParametersWithObject(dynamicParameters, new Hashtable(parametersFromUri));
157+
UpdateParametersWithObject(staticParameters, dynamicParameters, new Hashtable(parametersFromUri));
158158
}
159159
return dynamicParameters;
160160
}
161161

162-
private static void UpdateParametersWithObject(RuntimeDefinedParameterDictionary dynamicParameters, Hashtable templateParameterObject)
162+
private static void UpdateParametersWithObject(string[] staticParameters, RuntimeDefinedParameterDictionary dynamicParameters, Hashtable templateParameterObject)
163163
{
164+
const string duplicatedParameterSuffix = "FromTemplate";
165+
164166
if (templateParameterObject != null)
165167
{
166-
foreach (KeyValuePair<string, RuntimeDefinedParameter> dynamicParameter in dynamicParameters)
168+
foreach (string paramName in templateParameterObject.Keys)
167169
{
168-
try
169-
{
170-
foreach (string key in templateParameterObject.Keys)
171-
{
172-
if (key.Equals(dynamicParameter.Key, StringComparison.InvariantCultureIgnoreCase))
173-
{
174-
if (templateParameterObject[key] is TemplateFileParameterV1)
175-
{
176-
dynamicParameter.Value.Value = (templateParameterObject[key] as TemplateFileParameterV1).Value;
177-
}
178-
else
179-
{
180-
dynamicParameter.Value.Value = templateParameterObject[key];
181-
}
182-
dynamicParameter.Value.IsSet = true;
183-
((ParameterAttribute)dynamicParameter.Value.Attributes[0]).Mandatory = false;
184-
}
185-
}
186-
}
187-
catch
170+
string dynamicParamName = staticParameters.Contains(paramName, StringComparer.OrdinalIgnoreCase)
171+
? paramName + duplicatedParameterSuffix
172+
: paramName;
173+
174+
if (dynamicParameters.TryGetValue(dynamicParamName, out RuntimeDefinedParameter dynamicParameter))
188175
{
189-
throw new ArgumentException(string.Format(ProjectResources.FailureParsingTemplateParameterObject,
190-
dynamicParameter.Key,
191-
templateParameterObject[dynamicParameter.Key]));
176+
dynamicParameter.Value = templateParameterObject[paramName] is TemplateFileParameterV1 templateFileParameterV1
177+
? templateFileParameterV1.Value
178+
: templateParameterObject[paramName];
179+
180+
dynamicParameter.IsSet = true;
181+
((ParameterAttribute)dynamicParameter.Attributes[0]).Mandatory = false;
192182
}
193183
}
194184
}
@@ -249,8 +239,7 @@ internal static RuntimeDefinedParameter ConstructDynamicParameter(string[] stati
249239
RuntimeDefinedParameter runtimeParameter = new RuntimeDefinedParameter()
250240
{
251241
// For duplicated template parameter names, add a suffix FromTemplate to distinguish them from the cmdlet parameter.
252-
Name = staticParameters.Any(n => n.StartsWith(name, StringComparison.OrdinalIgnoreCase))
253-
? name + duplicatedParameterSuffix : name,
242+
Name = staticParameters.Contains(name, StringComparer.OrdinalIgnoreCase) ? name + duplicatedParameterSuffix : name,
254243
ParameterType = GetParameterType(parameter.Value.Type),
255244
Value = defaultValue
256245
};

0 commit comments

Comments
 (0)