為了只查詢最近一周的遠程桌面登錄日志,并按時間降序輸出結(jié)果,我們可以對代碼進行以下改進:
1. 增加時間過濾條件:在查詢中添加時間范圍,只查詢最近一周的事件。
2. 按時間降序排序:在查詢中指定按時間降序排列結(jié)果。
3. 優(yōu)化輸出:確保輸出結(jié)果按時間從新到舊排列。
以下是改進后的代碼:
//csharp
using System;
using System.Diagnostics;
using System.Linq;
namespace RemoteDesktopLogReader
{
class Program
{
static void Main(string[] args)
{
// 定義事件日志查詢
string logType = "Security";
string query = "*[System[(EventID=4624 or EventID=4625) and TimeCreated[timediff(@SystemTime) <= 604800000]]]"; // 604800000毫秒 = 7天
// 創(chuàng)建事件日志查詢
EventLogQuery eventsQuery = new EventLogQuery(logType, PathType.LogName, query)
{
ReverseDirection = true // 按時間降序排列
};
// 創(chuàng)建事件日志讀取器
using (EventLogReader logReader = new EventLogReader(eventsQuery))
{
EventRecord eventRecord;
while ((eventRecord = logReader.ReadEvent()) != null)
{
// 獲取事件ID
int eventID = eventRecord.Id;
// 獲取登錄時間
DateTime loginTime = eventRecord.TimeCreated.Value;
// 獲取登錄賬號
string accountName = eventRecord.Properties[5].Value.ToString();
// 獲取登錄IP
string ipAddress = eventRecord.Properties[18].Value.ToString();
// 獲取登錄結(jié)果
string loginResult = (eventID == 4624) ? "Success" : "Failure";
// 輸出登錄信息
Console.WriteLine($"Login Time: {loginTime}");
Console.WriteLine($"Account Name: {accountName}");
Console.WriteLine($"IP Address: {ipAddress}");
Console.WriteLine($"Login Result: {loginResult}");
Console.WriteLine(new string('-', 40));
}
}
}
}
}
代碼改進說明:
1. 時間范圍過濾:
- 在查詢條件中增加了 `TimeCreated[timediff(@SystemTime) <= 604800000]`,表示只查詢最近7天(604800000毫秒)的事件。
- `timediff(@SystemTime)` 計算事件時間與當(dāng)前時間的差值。
2. 按時間降序排序:
- 設(shè)置 `EventLogQuery.ReverseDirection = true`,使查詢結(jié)果按時間降序排列。
3. 輸出結(jié)果:
- 輸出結(jié)果會從最新的事件開始顯示,確保符合按時間降序的要求。
注意事項:
- 權(quán)限要求:運行此代碼需要管理員權(quán)限,因為訪問安全日志需要提升的權(quán)限。
- 事件屬性索引:`Properties[5]` 和 `Properties[18]` 分別表示登錄賬號和登錄IP,但這些索引可能因系統(tǒng)配置或Windows版本不同而變化。建議在實際運行前檢查事件日志的結(jié)構(gòu)。
- 日志量較大時:如果日志量非常大,查詢可能會較慢,可以進一步優(yōu)化查詢條件或分批次處理。
示例輸出:
Login Time: 2025-02-25 14:30:22
Account Name: DOMAIN\username
IP Address: 192.168.1.100
Login Result: Success
----------------------------------------
Login Time: 2025-02-24 10:15:45
Account Name: DOMAIN\username2
IP Address: 192.168.1.101
Login Result: Failure
----------------------------------------
...
通過這段代碼,你可以高效地獲取最近一周的遠程桌面登錄日志,并按時間降序輸出結(jié)果。
相關(guān)教程:
C#查看Windows系統(tǒng)最近一周遠程桌面登錄日志,并按照登錄時間降序輸出結(jié)果[
171]
http://29565.oa22.cn
C#讀取Windows系統(tǒng)事件日志中最近一天遠程桌面登錄信息代碼(賬號、時間、IP、結(jié)果成功或失?。凑諘r間降序輸出結(jié)果[
152]
http://29568.oa22.cn
C#從Windows系統(tǒng)事件日志中獲取遠程桌面登錄信息代碼,包括登錄賬號、登錄時間、登錄IP、登錄結(jié)果失敗或成功[
180]
http://29563.oa22.cn
該文章在 2025/2/27 12:45:55 編輯過