EventLog计算用户

时间:2016-10-06 09:57:15

标签: c#

美好的一天,我一直在使用Eventlog方法摆弄,随着摆弄,我能够计算出多少entry.replacementstrings [5]又名用户名。

public int countUsers { get; set; }
public string User { get; set; }
public Users(int count, string name)
{
    countUsers = count;
    User = name;
}

public void getCountUsers()
{
    number = 0; //
    UserList = new ObservableCollection<Users>();
    EventLog myNewLog = new EventLog(); 
    myNewLog.Log = "Security";
    foreach (EventLogEntry entry in myNewLog.Entries)
    {
        if (entry.InstanceId == 4624 && entry.TimeWritten.Date == DateTime.Today)
        {
            if (UserList.Count > 0)
            {
                bool check = false;
                foreach (var user in UserList)
                {
                    if (user.User == entry.ReplacementStrings[5])
                    {
                        user.countUsers += 1;
                        check = true;
                    }
                }
                if (!check)
                {
                    Users u = new Users(1, entry.ReplacementStrings[5]);
                    UserList.Add(u);
                }
            }
            else
            {
                Users u = new Users(1, entry.ReplacementStrings[5]);
                UserList = new ObservableCollection<Users>();
                UserList.Add(u);
            }
        }
    }
}

public void counter()
{

    var totalUsers = UserList.Sum(user => user.countUsers); 
    foreach (var user in UserList)
    {

        Console.WriteLine("There has been {0} users on {1}", user.countUsers, DateTime.Today.ToShortDateString());
    }
}

我现在拥有的是什么。我现在想要做的是,在writeline中添加一个正则表达式,这样它就不会计算用户SYSTEM。

我能够做到这一点,但是会打印出每个用户,但我想要了解在该日期有多少人在线的一般/全局概念。

所以我需要知道如何去除每个循环,并获取user.countUsers。

foreach (var user in UserList)
{
    Regex User = new Regex(@"SYSTEM");
    Match match = User.Match(user.User);
    if (!match.Success)
    {}
}

我现在不知道如何调用变量,所以我的正则表达式工作。任何人都知道如何解决它,也许可能没有正则表达式?

(旁注:我还需要帮助,因为EventLog是2x,当它应该是合法的那个时。我需要看看我将如何过滤它)

1 个答案:

答案 0 :(得分:0)

您不需要使用正则表达式,因为要排除的字符串是文字,您可以使用Linq:

foreach (var user in UserList.Where(u => u.User != "SYSTEM"))
{
    Console.WriteLine("There has been {0} users on {1}", user.countUsers, DateTime.Today.ToShortDateString());
}