在C#中,可以使用 System.Diagnostics.Eventing.Reader 命名空間來讀取Windows系統事件日志。以下是讀取最近一天遠程桌面登錄信息,并按登錄時間降序輸出的代碼示例:
using System;
using System.Collections.Generic;
using System.Diagnostics.Eventing.Reader;
using System.Globalization;
using System.Linq;
class Program
{
static void Main()
{
DateTime oneDayAgo = DateTime.Now.AddDays(-1);
string query = @"<QueryList>
<Query Id='0' Path='Security'>
<Select Path='Security'>
*[System[
(EventID=4624 or EventID=4625)
and TimeCreated[@SystemTime >= '" + oneDayAgo.ToString("yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture) + @"']
]]
</Select>
</Query>
</QueryList>";
List<RemoteDesktopLoginInfo> loginInfos = new List<RemoteDesktopLoginInfo>();
using (EventLogQuery eventLogQuery = new EventLogQuery("Security", PathType.LogName, query))
using (EventLogReader eventLogReader = new EventLogReader(eventLogQuery))
{
EventRecord eventRecord;
while ((eventRecord = eventLogReader.ReadEvent())!= null)
{
bool isSuccess = eventRecord.Id == 4624;
string account = eventRecord.Properties[5].Value.ToString();
DateTime loginTime = eventRecord.TimeCreated.Value;
string ip = eventRecord.Properties[18].Value.ToString();
loginInfos.Add(new RemoteDesktopLoginInfo
{
Account = account,
LoginTime = loginTime,
IP = ip,
IsSuccess = isSuccess
});
}
}
loginInfos = loginInfos.OrderByDescending(info => info.LoginTime).ToList();
foreach (var info in loginInfos)
{
Console.WriteLine($"賬號: {info.Account}");
Console.WriteLine($"登錄時間: {info.LoginTime}");
Console.WriteLine($"IP: {info.IP}");
Console.WriteLine($"登錄結果: {(info.IsSuccess? "成功" : "失敗")}");
Console.WriteLine("---------------------------");
}
}
}
class RemoteDesktopLoginInfo
{
public string Account { get; set; }
public DateTime LoginTime { get; set; }
public string IP { get; set; }
public bool IsSuccess { get; set; }
}
代碼說明:
1. 獲取最近一天的時間:使用 DateTime.Now.AddDays(-1) 獲取當前時間往前推一天的時間。
2. 事件日志查詢條件:構造一個XML格式的查詢語句,查詢 Security 日志中 EventID 為4624(成功登錄)或4625(失敗登錄),并且時間在最近一天內的事件。
3. 讀取事件日志:使用 EventLogQuery 和 EventLogReader 來執行查詢并讀取事件記錄。
4. 提取信息:從事件記錄的屬性中提取登錄賬號、登錄時間、IP地址和登錄結果。
5. 排序輸出:將提取的信息存儲在 RemoteDesktopLoginInfo 列表中,按登錄時間降序排序后輸出。
請確保你的程序以管理員權限運行,因為讀取 Security 日志通常需要管理員權限。
?
相關教程:
C#查看Windows系統最近一周遠程桌面登錄日志,并按照登錄時間降序輸出結果[
171]
http://29565.oa22.cn
C#讀取Windows系統事件日志中最近一天遠程桌面登錄信息代碼(賬號、時間、IP、結果成功或失敗),按照時間降序輸出結果[
152]
http://29568.oa22.cn
C#從Windows系統事件日志中獲取遠程桌面登錄信息代碼,包括登錄賬號、登錄時間、登錄IP、登錄結果失敗或成功[
180]
http://29563.oa22.cn
該文章在 2025/2/27 12:46:29 編輯過