域控制器中的Active Directory用户登录/注销历史记录

时间:2015-08-07 12:49:34

标签: c# active-directory

如何让Active Directory用户登录/注销历史记录也包括工作站锁定/解锁。

哪里有这样的信息?

1 个答案:

答案 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运行,并且每当有人登录到网络上的任何计算机时,您将获得数据库中的数据。