如何让Active Directory用户登录/注销历史记录也包括工作站锁定/解锁。
哪里有这样的信息?
答案 0 :(得分:1)
假设您已在每台计算机上启用了登录/注销事件并将其发送到域控制器(通过组策略...),您可以阅读事件日志以获取您的信息寻找。
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();
}
}
}
您需要在数据库中创建一个过程LogUserDetail
,并使用您的连接创建一个DBUtility
类。
然后,您可以将此应用程序作为Group Policy
运行,并且每当有人登录到网络上的任何计算机时,您将获得数据库中的数据。