2016-10-06 2 views
0

좋은 날, 나는 Eventlog 메소드를 둘러 보면서 주위를 둘러 보면서 얼마나 많은 entry.replacementstrings [5] 사용자 이름이 있을지 계산할 수있었습니다.사용자를 카운트하는 EventLog

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

내가 현재 가지고있는 것. 지금 내가 할 수 있기를 원하는 것은 사용자에게 SYSTEM을 계산하지 않도록 기록 라인에 정규식을 추가하는 것입니다.

나는 그것을 할 수 있었지만 모든 개별 사용자를 인쇄 할 것이 었습니다. 대신에 그 날짜에 얼마나 많은 사람들이 온라인에 있었는지에 대한 일반적인/글로벌 아이디어를 원합니다.

그래서 각 루프를 제거하고 user.countUsers를 얻는 방법을 알아야합니다.

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

이제 정규식이 작동하도록 변수를 호출하는 방법을 알지 못합니다. 누구든지 어쩌면 아마도 정규식없이 그것을 고칠 방법을 알고 계십니까?

(사이드 노트 : 나는 또한 합법적 인 사람 1해야 할 때 이벤트 로그가 2 배라는 사실 도움이 필요 내가 그를 필터링 할 방법을 볼 필요가있다.)

답변

0

당신이 돈을 Regex는 리터럴을 사용해야하므로 문자열을 사용할 필요가 없기 때문에 Linq를 사용할 수 있습니다. 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()); 
} 
+0

나는 사과를 더 분명히해야했습니다. 각각에 대해 사용하고 싶지 않습니다. 한 번 사용자가 로그온 한 횟수를 더 이상 알 필요가 없습니다. 일반적으로 알고 있어야합니다. 이렇게하면 다른 사용자가 로그온 한 횟수가 인쇄됩니다. – 308075

+0

그러면'Dictionary '@ 308075를 사용할 수 있습니다. –

관련 문제