internal override void BindArguments(PSObject obj)
{
if ((obj == null) && (Parameters.Count == 0))
return;
// TODO: bind the arguments to the parameters
CommandParameterSetInfo paramSetInfo = _cmdletInfo.GetDefaultParameterSet();
// TODO: refer to the Command._ParameterSetName for a param set name
if (obj != null)
{
var valueFromPipelineParameter = paramSetInfo.Parameters.Where(paramInfo => paramInfo.ValueFromPipeline).SingleOrDefault();
if (valueFromPipelineParameter != null)
BindArgument(valueFromPipelineParameter.Name, obj, valueFromPipelineParameter.ParameterType);
}
if (Parameters.Count > 0)
{
// bind by position location
for (int i = 0; i < Parameters.Count; i++)
{
CommandParameterInfo paramInfo = null;
CommandParameter parameter = Parameters[i];
if (string.IsNullOrEmpty(parameter.Name))
{
paramInfo = paramSetInfo.GetParameterByPosition(i);
if (paramInfo != null)
{
BindArgument(paramInfo.Name, parameter.Value, paramInfo.ParameterType);
}
}
else
{
paramInfo = paramSetInfo.GetParameterByName(parameter.Name);
if (paramInfo != null)
{
if (parameter.Value == null && paramInfo.ParameterType != typeof(SwitchParameter)
&& i < Parameters.Count - 1 && Parameters[i + 1].Name == null)
{
BindArgument(paramInfo.Name, Parameters[i + 1].Value, paramInfo.ParameterType);
i++;
}
else
BindArgument(paramInfo.Name, parameter.Value, paramInfo.ParameterType);
}
}
}
}
}