private List <CmdletParameterInfo> GetCmdletParameters(Model.CmdletInfo cmdletInfo) { List <CmdletParameterInfo> parameters = new List <CmdletParameterInfo>(); var fields = GetFields(cmdletInfo.CmdletType); foreach (var field in fields) { MemberInfo fieldInfo = field; var obsolete = fieldInfo.GetCustomAttributes <ObsoleteAttribute>().Any(); if (!obsolete) { var aliases = fieldInfo.GetCustomAttributes <AliasAttribute>(true); var parameterAttributes = fieldInfo.GetCustomAttributes <ParameterAttribute>(true); foreach (var parameterAttribute in parameterAttributes) { var description = parameterAttribute.HelpMessage; if (string.IsNullOrEmpty(description)) { // Maybe a generic one? Find the one with only a helpmessage set var helpParameterAttribute = parameterAttributes.FirstOrDefault(p => !string.IsNullOrEmpty(p.HelpMessage)); if (helpParameterAttribute != null) { description = helpParameterAttribute.HelpMessage; } } var typeString = field.FieldType.Name; var fieldAttribute = field.FieldType.GetCustomAttributes <CmdletPipelineAttribute>(false).FirstOrDefault(); if (fieldAttribute != null) { if (fieldAttribute.Type != null) { typeString = string.Format(fieldAttribute.Description, fieldAttribute.Type.Name); } else { typeString = fieldAttribute.Description; } } var cmdletParameterInfo = new CmdletParameterInfo() { Description = description, Type = typeString, Name = field.Name, Required = parameterAttribute.Mandatory, Position = parameterAttribute.Position, ValueFromPipeline = parameterAttribute.ValueFromPipeline, ParameterSetName = parameterAttribute.ParameterSetName, }; if (aliases != null && aliases.Any()) { foreach (var aliasAttribute in aliases) { cmdletParameterInfo.Aliases.AddRange(aliasAttribute.AliasNames); } } parameters.Add(cmdletParameterInfo); } } } foreach (var additionalParameter in cmdletInfo.AdditionalParameters) { var typeString = additionalParameter.ParameterType.Name; var fieldAttribute = additionalParameter.ParameterType.GetCustomAttributes <CmdletPipelineAttribute>(false).FirstOrDefault(); if (fieldAttribute != null) { if (fieldAttribute.Type != null) { typeString = string.Format(fieldAttribute.Description, fieldAttribute.Type.Name); } else { typeString = fieldAttribute.Description; } } parameters.Add(new CmdletParameterInfo() { Description = additionalParameter.HelpMessage, Type = typeString, Name = additionalParameter.ParameterName, Required = additionalParameter.Mandatory, Position = additionalParameter.Position, ParameterSetName = additionalParameter.ParameterSetName }); } return(parameters); }
private List <CmdletParameterInfo> GetCmdletParameters(Model.CmdletInfo cmdletInfo) { List <CmdletParameterInfo> parameters = new List <CmdletParameterInfo>(); var fields = GetFields(cmdletInfo.CmdletType); foreach (var field in fields) { MemberInfo fieldInfo = field; var obsolete = fieldInfo.GetCustomAttributes <ObsoleteAttribute>().Any(); if (!obsolete) { var aliases = field.GetCustomAttributes <AliasAttribute>(true); var parameterAttributes = field.GetCustomAttributes <ParameterAttribute>(true); var pnpParameterAttributes = field.GetCustomAttributes <PnPParameterAttribute>(true); foreach (var parameterAttribute in parameterAttributes) { var description = parameterAttribute.HelpMessage; if (string.IsNullOrEmpty(description)) { // Maybe a generic one? Find the one with only a helpmessage set var helpParameterAttribute = parameterAttributes.FirstOrDefault(p => !string.IsNullOrEmpty(p.HelpMessage)); if (helpParameterAttribute != null) { description = helpParameterAttribute.HelpMessage; } } var typeString = field.FieldType.Name; if (field.FieldType.IsGenericType) { typeString = field.FieldType.GenericTypeArguments[0].Name; } var fieldAttribute = field.FieldType.GetCustomAttributes <CmdletPipelineAttribute>(false).FirstOrDefault(); if (fieldAttribute != null) { if (fieldAttribute.Type != null) { typeString = string.Format(fieldAttribute.Description, fieldAttribute.Type.Name); } else { typeString = fieldAttribute.Description; } } var order = 0; if (pnpParameterAttributes != null && pnpParameterAttributes.Any()) { order = pnpParameterAttributes.First().Order; } var cmdletParameterInfo = new CmdletParameterInfo() { Description = description, Type = typeString, Name = field.Name, Required = parameterAttribute.Mandatory, Position = parameterAttribute.Position, ValueFromPipeline = parameterAttribute.ValueFromPipeline, ParameterSetName = parameterAttribute.ParameterSetName, Order = order }; if (aliases != null && aliases.Any()) { #if !NETCOREAPP3_0 foreach (var aliasAttribute in aliases) { cmdletParameterInfo.Aliases.AddRange(aliasAttribute.AliasNames); } #else var customAttributesData = fieldInfo.GetCustomAttributesData(); foreach (var aliasAttribute in customAttributesData.Where(c => c.AttributeType == typeof(AliasAttribute))) { cmdletParameterInfo.Aliases.AddRange(aliasAttribute.ConstructorArguments.Select(a => a.ToString())); } #endif } parameters.Add(cmdletParameterInfo); } } } foreach (var additionalParameter in cmdletInfo.AdditionalParameters) { var typeString = additionalParameter.ParameterType.Name; var fieldAttribute = additionalParameter.ParameterType.GetCustomAttributes <CmdletPipelineAttribute>(false).FirstOrDefault(); if (fieldAttribute != null) { if (fieldAttribute.Type != null) { typeString = string.Format(fieldAttribute.Description, fieldAttribute.Type.Name); } else { typeString = fieldAttribute.Description; } } parameters.Add(new CmdletParameterInfo() { Description = additionalParameter.HelpMessage, Type = typeString, Name = additionalParameter.ParameterName, Required = additionalParameter.Mandatory, Position = additionalParameter.Position, ParameterSetName = additionalParameter.ParameterSetName }); } return(parameters); }