using System.Diagnostics;
namespace ReadEventLogs
{
class Program
{
public static void Main(string[] args)
{
System.Diagnostics.EventLog eventLog1 = new System.Diagnostics.EventLog("Security", ".");
foreach(EventLogEntry entry in eventLog1.Entries)
{
//Event ID 4624 LOGON
//EVent ID 4634 LOGOFF
if (entry.InstanceId == 4634)
{
Console.WriteLine(entry.Message);
}
}
}
}
}
entry. 将包含您要查找的信息 .
如果未指定计算机名称或服务器,则将从本地计算机 "." 读取事件日志 .
现在已经说过,有一个替代解决方案来获取您正在寻找的信息 .
您可以编写一个简单的程序,直接将用户名(或您需要的任何其他信息)直接插入数据库 .
用户登录到任何计算机后,您可以获取用户名并调用存储过程以将数据插入数据库 .
...
public static void LogUserDetail()
{
//Get current logged on username
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
using (SqlConnection conn = DBUtility.Connection)
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "LogUserDetail";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("UserName", userName));
cmd.Parameters.Add(new SqlParameter("DateTime", DateTime.Now));
conn.Open();
cmd.ExecuteNonQuery();
}
}
}
1 回答
假设您已在每台计算机上启用了登录/注销事件并将其发送到域控制器(通过组策略...),您可以阅读事件日志以获取您正在查找的信息 .
entry.
将包含您要查找的信息 .如果未指定计算机名称或服务器,则将从本地计算机
"."
读取事件日志 .现在已经说过,有一个替代解决方案来获取您正在寻找的信息 .
您可以编写一个简单的程序,直接将用户名(或您需要的任何其他信息)直接插入数据库 .
用户登录到任何计算机后,您可以获取用户名并调用存储过程以将数据插入数据库 .
您需要在数据库中创建一个过程
LogUserDetail
并使用您的连接创建一个DBUtility
类 .然后,您可以将此应用程序作为
Group Policy
运行,并且每当有人登录到网络上的任何计算机时,您将获得数据库中的数据 .