Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }