Подсчет пользователей в журнале событий

#c#

#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 amp;amp; 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());
    }
}
  

Это то, что у меня сейчас есть. Теперь я хочу иметь возможность добавить регулярное выражение в строку записи, чтобы оно не учитывало пользовательскую СИСТЕМУ.

Я смог это сделать, но это распечатало бы каждого отдельного пользователя, но вместо этого мне нужно общее / глобальное представление о том, сколько людей было в Сети на указанную дату.

Итак, мне нужно знать, как это сделать, избавившись от цикла for each и просто получив user.countUsers.

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

Теперь я не знаю, как вызвать переменную, чтобы мое регулярное выражение работало. Кто-нибудь знает, как это исправить, может быть, возможно, без регулярного выражения?

(Примечание: мне также нужна помощь с тем фактом, что журнал событий равен 2x, тогда как для тех, которые являются законными, он должен быть равен 1. Мне нужно было бы посмотреть, как я буду это фильтровать)

Ответ №1:

Вам не нужно использовать регулярное выражение, поскольку строка, которую вы хотите исключить, является буквальной, вы можете использовать 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());
}
  

Комментарии:

1. Я должен был более четко выразить свои извинения. Я не хочу использовать a для каждого. Мне больше не нужно знать, сколько раз один пользователь входил в систему, мне нужно знать это в целом. Это выведет, сколько раз другой пользователь входил в систему.

2. Тогда вы можете использовать Dictionary<string, int> @308075