public void ParseNode(string text, int level)
 {
     ParseParameters parseParameters = new ParseParameters();
     parseParameters.Name = text;
     parseParameters.Level = level;
     nodes.Enqueue(parseParameters);
 }
예제 #2
0
        public void ParseNode(string text, int level)
        {
            ParseParameters parseParameters = new ParseParameters();

            parseParameters.Name  = text;
            parseParameters.Level = level;
            nodes.Enqueue(parseParameters);
        }
예제 #3
0
        public MediaWikiApiParseRequestResult Parse(string title, ParseParameters parameters)
        {
            LogInfo(string.Format("parsing page \"{0}\"", title));

            string  data = _http_get(_get_api_url() + string.Format("?action=parse&page={0}&prop=wikitext&format=json", title));
            JObject json = JObject.Parse(data);

            MediaWikiApiParseRequestResult result = new MediaWikiApiParseRequestResult();

            if (json.ContainsKey("parse"))
            {
                result.Text = json["parse"]["wikitext"]["*"].Value <string>();
            }
            else if (json.ContainsKey("error"))
            {
                result.SetError(json["error"]["code"].Value <string>(), json["error"]["info"].Value <string>());
            }

            return(result);
        }
예제 #4
0
    public static int Main(string[] arguments)
    {
        // initiate parameter parsing
        ParseParameters parameter = new ParseParameters();

        // default parameter is allowed
        parameter.EnableDefaultParameter();

        // parse command line
        if (parameter.Scan(arguments))
        {         // error reading command line
            Console.Error.WriteLine(parameter.errorText);
            return(-1);
        }

        // check if there is an unknown parameter
        if (!parameter.CheckForUnknown(new string[] { "?", "h", "help", "l", "log", "logname", "c", "computer", "computername", "s", "start", "starttime", "e", "end", "endtime", "level", "csv", "f", "file", "filename", "q", "quiet", "domainname", "domain", "d", "username", "user", "u", "password", "pass", "p" }))
        {         // error reading command line
            Console.Error.WriteLine("Unknown parameter error.");
            return(-1);
        }

        if (parameter.Exist("?") || parameter.Exist("h") || parameter.Exist("help"))
        {         // help wanted
            Console.WriteLine("{0}\t\t\t\t\tMarkus Scholtes, 2019\n", System.AppDomain.CurrentDomain.FriendlyName);
            Console.WriteLine("Console program to determine the events of all event logs ordered by time.\n");
            Console.WriteLine("{0} [[-logname:]<LOGNAMES>] [-level:<LEVEL>]", System.AppDomain.CurrentDomain.FriendlyName);
            Console.WriteLine("    [-starttime:<STARTTIME>] [-endtime:<ENDTIME>] [-computername:<COMPUTER>]");
            Console.WriteLine("    [-filename:<FILENAME>] [-csv] [-quiet] [-?|-help]");
            Console.WriteLine("\nParameters:");
            Console.WriteLine("-logname:<LOGNAMES> comma separated list of event log names. Queries all event");
            Console.WriteLine("    logs if omitted (can be abbreviated as -log or -l or can be omitted).");
            Console.WriteLine("-level:<LEVEL> queries up to level <LEVEL>. Queries all events if omitted.");
            Console.WriteLine("    Level: Critical - 1, Error - 2, Warning - 3, Informational - 4, Verbose - 5");
            Console.WriteLine("-starttime:<STARTTIME> start time of events to query (can be abbreviated as");
            Console.WriteLine("    -start or -s). Default is end time minus one hour.");
            Console.WriteLine("-endtime:<ENDTIME> end time of events to query (can be abbreviated as -end or");
            Console.WriteLine("    -e). Default is now.");
            Console.WriteLine("-computername:<COMPUTER> name of computer to query (can be abbreviated as");
            Console.WriteLine("    -computer or -c). Default is the local system.");
            Console.WriteLine("-domainname:<DOMAIN> name of windows domain to logon (can be abbreviated as");
            Console.WriteLine("    -domain or -d). Default is to pass through current credentials.");
            Console.WriteLine("-username:<USER> name of windows user to logon (can be abbreviated as -user or");
            Console.WriteLine("    -u). Default is to pass through current credentials.");
            Console.WriteLine("-password:<PASSWORD> password of windows user to logon (can be abbreviated as");
            Console.WriteLine("    -pass or -p). Default is to pass through current credentials.");
            Console.WriteLine("-filename:<FILENAME> name of the file in which the results are output (can be");
            Console.WriteLine("    abbreviated as -file or -f). Default is output to the console.");
            Console.WriteLine("-csv output format \"comma separated\" instead of output format text.");
            Console.WriteLine("-quiet shows only error messages and results (can be abbreviated as -q).");
            Console.WriteLine("-? or -help shows this help (can be abbreviated as -h).");
            Console.WriteLine("\nExamples:");
            Console.WriteLine("{0} -start:10:00 -end:11:00", System.AppDomain.CurrentDomain.FriendlyName);
            Console.WriteLine("{0} System,Setup,Application -Computer=REMOTESYSTEM", System.AppDomain.CurrentDomain.FriendlyName);
            Console.WriteLine("{0} /logname=Application /level:2 /q /CSV /file:OnlyErrors.csv", System.AppDomain.CurrentDomain.FriendlyName);
            Console.WriteLine("{0} \"/starttime:2019/11/29 10:00\" \"/endtime:2019/11/29 11:00\"", System.AppDomain.CurrentDomain.FriendlyName);
            Console.WriteLine("{0} \"/s=2019/12/08 10:09:49.450\" \"/e=2019/12/08 10:09:49.850\"", System.AppDomain.CurrentDomain.FriendlyName);
            Console.WriteLine("{0} /log=Security -Computer=REMOTE /D:DOM /U:Admin /P=NoP@ss", System.AppDomain.CurrentDomain.FriendlyName);
            return(0);
        }

        bool bQuiet = false;         // no status messages?

        if (parameter.Exist("q") || parameter.Exist("quiet"))
        {
            bQuiet = true;
        }

        // read end time for log query
        DateTime endTime;
        // read parameter /e, /end or /endtime
        string endString = parameter.ValueOrDefault("e", parameter.ValueOrDefault("end", parameter.Value("endtime")));

        if (endString != "")
        {         // parameter set, convert to timestamp
            try {
                endTime = DateTime.Parse(endString);
            }
            catch
            {             // cannot convert string to timestamp
                Console.Error.WriteLine("Error: unknown time format");
                return(-1);
            }
        }
        else
        {
            // parameter not specified, use default (now)
            endTime = DateTime.Now;
        }

        // read start time for log query
        DateTime startTime;
        // read parameter /s, /start or /starttime
        string startString = parameter.ValueOrDefault("s", parameter.ValueOrDefault("start", parameter.Value("starttime")));

        if (startString != "")
        {         // parameter set, convert to timestamp
            try {
                startTime = DateTime.Parse(startString);
            }
            catch
            {             // cannot convert string to timestamp
                Console.Error.WriteLine("Error: unknown time format");
                return(-1);
            }
        }
        else
        {
            // parameter not specified, use default (end time minus one hour)
            startTime = endTime.AddHours(-1.0);
        }

        if (endTime <= startTime)
        {         // end time has to be later than start time
            Console.Error.WriteLine("Error: end time has to be later than start time");
            return(-1);
        }

        // get information level, 0 = default = return all events
        // Level: LogAlways - 0, Critical - 1, Error - 2, Warning - 3, Informational - 4, Verbose - 5
        // there are different levels for auditing logs!
        string informationLevel = parameter.Value("level");
        int    maxLevel         = 0;

        if (informationLevel != "")
        {         // parameter level was given
            if (Int32.TryParse(informationLevel, out maxLevel))
            {     // filter for information level
                if ((maxLevel < 0) || (maxLevel > 5))
                {
                    // mark as wrong information level
                    maxLevel = -1;
                }
            }
            else
            {
                // mark as wrong information level
                maxLevel = -1;
            }
            if (maxLevel < 0)
            {             // wrong information level -> error
                Console.Error.WriteLine("Error: unknown information level");
                Console.Error.WriteLine("The following values are allowed: up to Critical - 1, up to Error - 2, up to Warning - 3, up to Informational - 4, up to Verbose - 5");
                return(-1);
            }
        }

        EventLogSession session;
        string          userName = parameter.ValueOrDefault("u", parameter.ValueOrDefault("user", parameter.Value("username")));

        if (userName == "")
        {
            // connect to remote computer in parameter /c, /computer or /computername or to "localhost" with existent credentials
            session = new EventLogSession(parameter.ValueOrDefault("c", parameter.ValueOrDefault("computer", parameter.ValueOrDefault("computername", "localhost"))));
        }
        else
        {
            string domainName = parameter.ValueOrDefault("d", parameter.ValueOrDefault("domain", parameter.Value("domainname")));
            string passWord   = parameter.ValueOrDefault("p", parameter.ValueOrDefault("pass", parameter.Value("password")));

            // connect to remote computer in parameter /c, /computer or /computername or to "localhost" with credentials in parameters
            session = new EventLogSession(parameter.ValueOrDefault("c", parameter.ValueOrDefault("computer", parameter.ValueOrDefault("computername", "localhost"))), domainName, userName, new System.Net.NetworkCredential("", passWord).SecurePassword, SessionAuthentication.Default);
        }

        int outputMode = 1;         // 1 - Text, 2 - CSV

        if (parameter.Exist("csv"))
        {
            outputMode = 2;
        }

        // get filename. If no filename is given output is written to console
        string fileName = parameter.ValueOrDefault("f", parameter.ValueOrDefault("file", parameter.Value("filename")));

        List <string> logNames;

        // read parameter /l or /log or default parameter for log name (or comma separated list of names given)
        if (parameter.ValueOrDefault("l", parameter.ValueOrDefault("log", parameter.ValueOrDefault("logname", parameter.DefaultParameter()))) != "")
        {         // yes, only read those logs
            logNames = new List <string>(parameter.ValueOrDefault("l", parameter.ValueOrDefault("log", parameter.DefaultParameter())).Split(new char[] { ',', ';' }).Where(val => val.Trim() != "").Select(val => val.Trim()).ToArray());
        }
        else
        {         // no parameter for log, read all logs
            try { // retrieve all log names
                logNames = new List <string>(session.GetLogNames());
            }
            catch (Exception e)
            {             // cannot retrieve log names
                Console.Error.WriteLine("Error connecting to event log: " + e.Message);
                return(-2);
            }
        }

        // sort log names now to save work later
        logNames.Sort();

        int logCount = 0;
        List <EventEntry> eventList = new List <EventEntry>();

        foreach (string name in logNames)
        {         // query entries for all logs
            if (GetEntries(ref eventList, name, session, startTime, endTime, maxLevel, outputMode, bQuiet))
            {
                logCount++;
            }
        }

        if (eventList.Count > 0)
        {         // only write events if there are any
            if (fileName == "")
            {     // output to console
                if (outputMode == 1)
                {
                    Console.WriteLine("time created\tlog\tid\tsource\tlevel\tdescription");
                }
                else
                {
                    Console.WriteLine("\"time created\";\"log\";\"id\";\"source\";\"level\";\"description\"");
                }

                foreach (EventEntry entry in eventList.OrderBy(a => a.timeCreated))
                {                 // output events sorted by time
                    Console.WriteLine(entry.message);
                }
            }
            else
            {                   // output to file
                try {
                    // write header line only to new files
                    bool typeHeader = true;
                    if (File.Exists(fileName))
                    {
                        typeHeader = false;
                    }

                    FileStream fs = new FileStream(fileName, FileMode.Append);
                    using (StreamWriter sw = new StreamWriter(fs, Encoding.Default))
                    {
                        if (typeHeader)
                        {                         // output the header line
                            if (outputMode == 1)
                            {
                                sw.WriteLine("time created\tlog\tid\tsource\tlevel\tdescription");
                            }
                            else
                            {
                                sw.WriteLine("\"time created\";\"log\";\"id\";\"source\";\"level\";\"description\"");
                            }
                        }

                        foreach (EventEntry entry in eventList.OrderBy(a => a.timeCreated))
                        {                         // output events sorted by time
                            sw.WriteLine(entry.message);
                        }
                    }
                    if (fs != null)
                    {
                        fs.Dispose();
                    }
                }
                catch (Exception e)
                {
                    Console.Error.WriteLine("Error writing to file \"" + fileName + "\": " + e.Message);
                    return(1);
                }
            }
        }

        if (!bQuiet)
        {
            Console.WriteLine("Successfully processed " + eventList.Count + " events from " + logCount + " logs, access errors with " + (int)(logNames.Count - logCount) + " logs.");
        }
        return(0);
    }
예제 #5
0
        public static int Main(string[] argv)
        {
            void resetstdout()
            {
                if (@out != null)
                {
                    Console.Out.Dispose();
                    Console.SetOut(@out);

                    ms.Dispose();
                }
            }

            int ret;

            try
            {
                Directory.SetCurrentDirectory(ASM_FILE.Directory.FullName);
                Console.Title = TITLE;

                if (Win32.System == OS.Windows)
                {
                    Console.BufferWidth = Math.Max(201, Console.BufferWidth);
                }

                ret = MainCore(ParseParameters(argv,
                                               ("d", "debug"),
                                               ("dp", "dependencies"),
                                               ("o", "output"),
                                               ("u", "unsafe"),
                                               ("c", "clean-output"),
                                               ("i", "input"),
                                               ("h", "help"),
                                               ("?", "help"),
                                               ("l", "lang"),
                                               ("q", "quiet"),
                                               ("ll", "list-languages"),
                                               ("kp", "key-pair"),
                                               ("s", "settings"),
                                               ("rs", "reset-settings"),
                                               ("v", "verbose"),
                                               ("vv", "visual"),
                                               ("mef", "msbuild-error-format"),
                                               ("ms", "msbuild-error-format"),
                                               ("k", "keep-temp"),
                                               ("g", "generate-always"),
                                               ("t", "target-system"),
                                               ("a", "architecture"),
                                               ("wall", "warnings-as-errors"),
                                               ("r", "run"),
                                               ("w", "warm-up"),
                                               ("wup", "warm-up")
                                               ), out _);

                resetstdout();
            }
            catch (Exception ex)
                when(!Debugger.IsAttached)
                {
                    ret = -1;
                    resetstdout();

                    StringBuilder sb = new StringBuilder();

                    do
                    {
                        sb.Insert(0, $"[{ex.GetType().FullName}]  {ex.Message}:\n{ex.StackTrace}\n");

                        ex = ex.InnerException;
                    }while (ex != null);

                    DebugPrintUtil.PrintSeperator("FATAL ERROR");
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine(sb.ToString());
                    Console.ForegroundColor = ConsoleColor.Gray;

                    DebugPrintUtil.DisplayFinalResult(DebugPrintUtil.FinalResult.Errors_Failed);
                }

            if (Debugger.IsAttached)
            {
                Console.WriteLine("Press any key to exit ...");
                Console.ReadKey(true);
            }

            return(ret);
        }