首页 文章

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

提问于
浏览
0

如何获取Active Directory用户登录/注销历史记录还包括工作站锁定/解锁 .

哪里有这样的信息?

1 回答

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

相关问题