Esempio n. 1
0
        /// <summary>
        /// The execute.
        /// </summary>
        /// <exception cref="UnauthorizedAccessException">
        /// </exception>
        /// <exception cref="InvalidOperationException">
        /// </exception>
        public void Execute()
        {
            ShowHeader();

            string[] args = Environment.GetCommandLineArgs().Skip(1).ToArray();
            if (!args.Any())
            {
                ShowHelp();
                return;
            }

            var commandLine = new CommandLine(args);

            if (commandLine.GetWantsHelp())
            {
                ShowHelp();
                return;
            }

            // todo: add support for job monitoring

            // Check config file
            ApplicationSettings settings = LoadSettings();

            // Connect to server
            IUpdateServer server = Server.Connect(settings.Server);

            // Check user has admin access
            UpdateServerUserRole role = server.GetCurrentUserRole();

            if (role != UpdateServerUserRole.Administrator)
            {
                throw new UnauthorizedAccessException("You don't have administrator access on the WSUS server.");
            }

            // Get the default rule
            bool             isTest  = commandLine.GetIsTest();
            RunSetCollection runSets = settings.RunSets;

            switch (commandLine.GetUseRunSet())
            {
            case TriState.Yes:
                if (runSets == null || runSets.Count == 0)
                {
                    throw new InvalidOperationException(
                              "/runset specified on the command line.  But there are no runsets defined in the config file.");
                }

                // we have run sets
                // this means our approval logic is more complex
                DoRunSets(server, runSets, commandLine, isTest);

                break;

            case TriState.No:
                DoNoRunSets(settings, server, isTest);

                break;

            default:
                if (runSets != null && runSets.Count > 0)
                {
                    throw new InvalidOperationException(
                              "RunSets exist in the application config. /norunset or /runset must be specified on the command line.");
                }

                break;
            }
        }