C# 已登录用户状态

C# 已登录用户状态,c#,asp.net,.net,active-directory,C#,Asp.net,.net,Active Directory,如何以编程方式访问active directory中的用户状态?尤其地 状态,如active/away/lockedout等。这是为了构建一个web快照,以查看所有已登录用户及其各自的状态 到目前为止,我可以搜索特定域下的所有用户,但没有找到他们的当前状态 using (var context = new PrincipalContext(ContextType.Domain, "domain")) { using (var searcher = new PrincipalSearche

如何以编程方式访问active directory中的用户状态?尤其地 状态,如active/away/lockedout等。这是为了构建一个web快照,以查看所有已登录用户及其各自的状态

到目前为止,我可以搜索特定域下的所有用户,但没有找到他们的当前状态

using (var context = new PrincipalContext(ContextType.Domain, "domain"))
{
    using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
    {
        foreach (var result in searcher.FindAll())
        {
            DirectoryEntry de = result.GetUnderlyingObject() as DirectoryEntry;
            Console.WriteLine("First Name: " + de.Properties["givenName"].Value);
            Console.WriteLine("Last Name : " + de.Properties["sn"].Value);
            Console.WriteLine("User principal name: " + de.Properties["userPrincipalName"].Value);

        }
    }
}
“离开”不是你将从Active Directory中得到的东西

您可以查看以下属性以获取所需的一些信息: 是您要查看的主要属性

在LDAP查询中使用
(userAccountControl:AND:=2)
将查找禁用的用户

其他一些有用的属性包括:

  • lastLogon(对于“活动”,您必须确定活动对您意味着什么)
  • 锁定时间(锁定时间>0)表示它们被锁定
  • accountExpires适用于过期用户

您可以从每个工作站和域控制器的安全日志中收集登录\注销用户事件。通过分析这些信息,您可以确定当前的活动用户。不幸的是,该解决方案无法在具有数千个工作站和数百个DC的企业环境中工作。有时由于某些原因,安全日志中缺少登录\注销事件

如果使用lastLogon\lastLogonTimestamp属性,请注意:

  • lastLogon属性不在域控制器之间复制。这是您从中收集信息的域控制器上的最后一次登录用户时间。要确定最后一次用户登录,必须从所有DC收集属性并选择“最大值”
  • lastLogonTimestamp每9-14天复制一次。lastLogontimeStamp将比当前日期晚9-14天
我在谷歌上找到了一个不错的广告链接。然而,这并没有谈论用户状态。@rory.ap,我已经包括了我到目前为止所做的事情。你愿意分享你的想法吗?谢谢你的支持。如果“客场”不可用,那么我很乐意使用Active。活动意味着,无论用户是否登录到当前域/网络中的任何节点。哦,在这种情况下,您不会从AD获得“登录状态”。这并不容易。我的意思是“活动”,如中所示,用户未被禁用或锁定在广告中。谢谢分享。我们只在一个DC中查看200个VM。我尚未投入运营,因此无法进一步发表评论。不过,我们正在考虑小规模。