【问题标题】:Find out when a member was added to an Active Directory group了解何时将成员添加到 Active Directory 组
【发布时间】:2015-09-01 20:27:25
【问题描述】:

我正在从 Active Directory 中获取有关用户和组的信息。我可以通过扩展方法获取各种属性值。

public static string GetProperty(this Principal principal, string property)
{
    DirectoryEntry directoryEntry = principal.GetUnderlyingObject() as DirectoryEntry;

    if (directoryEntry.Properties.Contains(property))
    {
        return directoryEntry.Properties[property].Value.ToString();
    }

    return string.Empty;
}

我面临的问题是我需要获取更深层次的信息,例如何时将用户添加到组中?我希望能够通过 C# 做到这一点。这可能吗?可能使用这些安全事件? https://support.microsoft.com/en-us/kb/174074

使用 ASP.NET MVC、C#、DirectoryServices.dll

【问题讨论】:

  • 我认为信息不会以任何可查询的方式直接存储在 AD 中。您的链接是指将出现在安全事件日志中的条目。
  • @stephen.vakil 我认为您对不直接存储在 AD 中的信息是正确的。由于它更像是交易数据,我认为它可能在安全事件中,但我不确定这些是否可以从 c# 轻松访问
  • 用户添加的标志听起来不像任何属性 AD 组。是否可以拉出用户列表,然后再与该列表进行比较?或者您是否正在寻找某种关于用户已添加的内置通知?
  • @Demarini 我正在寻找内置的东西,但似乎这样的东西不存在。我将研究查询这些代码的安全事件。

标签: c# asp.net-mvc active-directory directoryservices


【解决方案1】:

假设您的机器设置为收集这些事件,您可以阅读事件日志以获取您正在寻找的信息...我编写了这个示例来获取logoff 事件。您可以在 MSDN 上查找事件 ID。

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);
          }
        }
      }
   }
}

如果未指定计算机名称或服务器,则将从本地计算机 "." 读取事件日志

【讨论】:

  • 这让我朝着正确的方向前进。不幸的是,我们实施的组策略记录了很多事件,所以如果我想看到类似用户被添加到组时的内容,它可能发生在日志之前,日志会将那个事件推送出去,所以它不会显示那个事件了。但这会奏效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 2012-03-11
  • 1970-01-01
相关资源
最近更新 更多