private static bool ParseOpsMgrConfigArgument(CommandlineArgument commandlineArgument, String[] arguments, ref int index)
        {
            if (ConsumeArgument(commandlineArgument, arguments[index], "opsmgr"))
            {
                commandlineArgument.Parameter = true;
                index++;
                return(true);
            }

            return(false);
        }
        private static bool ParseAcceptLicenseArgument(CommandlineArgument commandlineArgument, String[] arguments, ref int index)
        {
            if (ConsumeArgument(commandlineArgument, arguments[index], "IACCEPTSCEULA"))
            {
                commandlineArgument.Parameter = true;
                index++;
                return(true);
            }

            return(false);
        }
        private static bool ParseOemSetupArgument(CommandlineArgument commandlineArgument, String[] arguments, ref int index)
        {
            if (ConsumeArgument(commandlineArgument, arguments[index], "prep"))
            {
                commandlineArgument.Parameter = true;
                index++;
                return(true);
            }

            return(false);
        }
        private static bool ParseCertificateThumbprintArgument(CommandlineArgument commandlineArgument, String[] arguments, ref int index)
        {
            if (ConsumeArgument(commandlineArgument, arguments[index], "CmpCertificateThumbprint"))
            {
                if (FetchValue(commandlineArgument, arguments, index))
                {
                    index++;
                    commandlineArgument.Parameter = (String)commandlineArgument.Parameter;

                    arguments[index] = (String)commandlineArgument.Parameter;
                    index++;
                    return(true);
                }
            }
            return(false);
        }
        private static bool ParseActionArgument(CommandlineArgument commandlineArgument, String[] arguments, ref int index)
        {
            String[]       parameters = { "i", "x", "runui" };
            SetupActions[] actions    = { SetupActions.UnattendedInstall, SetupActions.UnattendedUninstall, SetupActions.UserInterface };

            for (int iterator = 0; iterator < parameters.Length; iterator++)
            {
                if (ConsumeArgument(commandlineArgument, arguments[index], parameters[iterator]))
                {
                    commandlineArgument.Parameter = actions[iterator];
                    index++;
                    return(true);
                }
            }

            return(false);
        }
        private static bool ParseSetupLocationArgument(CommandlineArgument commandlineArgument, String[] arguments, ref int index)
        {
            if (ConsumeArgument(commandlineArgument, arguments[index], "SetupLocation"))
            {
                if (FetchValue(commandlineArgument, arguments, index))
                {
                    index++;
                    commandlineArgument.Parameter = ValidateDirectoryPath((String)commandlineArgument.Parameter);

                    arguments[index] = (String)commandlineArgument.Parameter;

                    SetupLogger.LogInfo("file path {0}", commandlineArgument.Parameter);
                    index++;
                    return(true);
                }
            }
            return(false);
        }
        private static bool FetchValue(CommandlineArgument commandlineArgument, String[] arguments, int index)
        {
            if (index + 1 < arguments.Length)
            {
                if (IsArgument(arguments[index + 1]))
                {
                    throw new Exception(String.Format("The parameter {0} does not have a value associated with it", arguments[index]));
                }

                index++;
                commandlineArgument.Parameter = arguments[index];

                return(true);
            }
            else
            {
                throw new Exception(String.Format("The parameter {0} does not have a value associated with it", arguments[index]));
            }
        }
        private static bool ParseOptionsArgument(CommandlineArgument commandlineArgument, String[] arguments, ref int index)
        {
            const string optionsParameter = @"options";

            if (ConsumeArgument(commandlineArgument, arguments[index], optionsParameter))
            {
                if (FetchValue(commandlineArgument, arguments, index))
                {
                    index++;
                    commandlineArgument.Parameter = ValidateFilePath((String)commandlineArgument.Parameter);

                    arguments[index] = (String)commandlineArgument.Parameter;

                    SetupLogger.LogInfo("MST file path {0}", commandlineArgument.Parameter);
                    index++;
                    return(true);
                }
            }

            return(false);
        }
        private static bool ConsumeArgument(CommandlineArgument commandlineArgument, String argument, String parameter, bool throwOnDuplicate = true)
        {
            foreach (String marker in CommandlineParameterMarkers)
            {
                int comparison = String.Compare(argument, marker + parameter, true);
                if (comparison == 0)
                {
                    if (commandlineArgument.Valid == true)
                    {
                        SetupLogger.LogError("Argument {0} already set", argument);
                        if (throwOnDuplicate)
                        {
                            throw new Exception(String.Format("The parameter {0} is already specified.", argument));
                        }
                    }

                    return(true);
                }
            }

            return(false);
        }
        private static bool ParseFeatureArgument(CommandlineArgument commandlineArgument, String[] arguments, ref int index)
        {
            String[]        parameters = { "tenant", "admin", "server" };
            SetupFeatures[] features   = { SetupFeatures.TenantExtension, SetupFeatures.AdminExtension, SetupFeatures.Server };

            for (int iterator = 0; iterator < parameters.Length; iterator++)
            {
                if (ConsumeArgument(commandlineArgument, arguments[index], parameters[iterator], throwOnDuplicate:false))
                {
                    if ((commandlineArgument.Parameter != null) && (commandlineArgument.Parameter is SetupFeatures))
                    {
                        commandlineArgument.Parameter = features[iterator] | (SetupFeatures)commandlineArgument.Parameter;
                    }
                    else
                    {
                        commandlineArgument.Parameter = features[iterator];
                    }
                    index++;
                    return(true);
                }
            }

            return(false);
        }