You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过DirectoryServices获取AD组成员的TimeToLive属性?

获取AD临时组成员的TimeToLive属性

要获取AD组中临时成员的TTL(剩余停留时间),不能通过DirectoryEntry.Invoke("members")方法实现——该方法仅返回成员对象,不会携带TTL信息。正确的方式是通过LDAP查询的member;showttl属性获取带TTL的成员列表,具体实现如下:

代码实现

DirectoryEntry dc = new DirectoryEntry();
DirectorySearcher searcher = new DirectorySearcher(dc);
// 过滤目标AD组
searcher.Filter = "(&(objectCategory=group)(cn=UG_TS_CISCO))";
// 指定加载带TTL信息的成员属性
searcher.PropertiesToLoad.Add("member;showttl");

foreach (SearchResult src in searcher.FindAll())
{
    if (!src.Properties.Contains("member;showttl")) continue;
    
    foreach (var memberWithTtlObj in src.Properties["member;showttl"])
    {
        string memberWithTtl = memberWithTtlObj.ToString();
        // 解析TTL秒数
        int ttlTagStart = memberWithTtl.IndexOf("<TTL=") + 5;
        int ttlTagEnd = memberWithTtl.IndexOf(">");
        if (ttlTagStart < 5 || ttlTagEnd <= ttlTagStart) continue;
        
        if (long.TryParse(memberWithTtl.Substring(ttlTagStart, ttlTagEnd - ttlTagStart), out long ttlSeconds))
        {
            // 计算成员离开时间(当前时间+TTL秒数)
            DateTime leaveTime = DateTime.Now.AddSeconds(ttlSeconds);
            
            // 解析成员的LDAP路径并获取用户信息
            string memberDn = memberWithTtl.Substring(ttlTagEnd + 1);
            using (DirectoryEntry memberEntry = new DirectoryEntry($"LDAP://{memberDn}"))
            {
                string userName = memberEntry.Properties["name"].Value?.ToString() ?? "未知";
                string samAccount = memberEntry.Properties["sAMAccountName"].Value?.ToString() ?? "未知";
                
                // 添加到DataGridView
                dataGridView.Rows.Add(userName, samAccount, leaveTime.ToString("yyyy-MM-dd HH:mm:ss"));
            }
        }
    }
}

关键说明

  • member;showttl是AD专属的特殊属性修饰符,仅在Windows Server 2012及以上版本的AD环境中可用,用于返回带TTL的临时成员列表。
  • TTL值以秒为单位,需转换为具体的离开时间展示;若需保证时间准确性,可改用AD服务器时间而非本地时间。
  • 代码中增加了格式校验和异常判断,避免因字符串格式异常导致程序崩溃。
  • 使用using包裹DirectoryEntry,确保AD连接资源及时释放。

内容的提问来源于stack exchange,提问作者madv1k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 17:42:39