Active directory 如何获取使用syntaxID 2.5.5.16长整数存储64位NT文件时间(时间间隔)值的LDAP架构属性列表

Active directory 如何获取使用syntaxID 2.5.5.16长整数存储64位NT文件时间(时间间隔)值的LDAP架构属性列表,active-directory,ldap,schema,Active Directory,Ldap,Schema,是否有任何方法可以查询使用syntaxID 2.5.5.16长整数存储64位NT文件时间值的LDAP架构属性? 我知道其中一些,比如:pwdLastSet、lastLogon、badPasswordTime。 但是,如何通过查询模式配置来获取模式中所有已定义的属性?无法准确地找到所有这些属性。间隔类型也用于非日期。您将在示例中看到,语法是Interval,但它不是日期。间隔类型实际上只是一个数字。模式中没有任何内容告诉您如何使用该数字 最好的方法是找到Interval类型的所有属性,然后找到一个

是否有任何方法可以查询使用syntaxID 2.5.5.16长整数存储64位NT文件时间值的LDAP架构属性? 我知道其中一些,比如:pwdLastSet、lastLogon、badPasswordTime。
但是,如何通过查询模式配置来获取模式中所有已定义的属性?

无法准确地找到所有这些属性。间隔类型也用于非日期。您将在示例中看到,语法是Interval,但它不是日期。间隔类型实际上只是一个数字。模式中没有任何内容告诉您如何使用该数字

最好的方法是找到Interval类型的所有属性,然后找到一个填充了该属性的对象,并尝试将其转换为日期,然后看看会发生什么。但是该类型的大多数属性并没有被真正使用,因此不会有任何填充了该属性的对象

我不知道您使用的是哪种语言,但在C语言中,它看起来像这样更改第一行中的DN以反映您的域:

var schema = new DirectoryEntry("LDAP://CN=Schema,CN=Configuration,DC=example,DC=com");
var attributeSearch = new DirectorySearcher(schema) {
    Filter = "(&(objectClass=attributeSchema)(attributeSyntax=2.5.5.16))",
    PropertiesToLoad = { "lDAPDisplayName" }
};

using (var results = attributeSearch.FindAll()) {
    foreach (SearchResult result in results) {
        var attributeName = (string) result.Properties["lDAPDisplayName"][0];
        var search = new DirectorySearcher {
            Filter = $"({attributeName}=*)",
            PropertiesToLoad = { attributeName }
        };
        try {
            var hasAttribute = search.FindOne();
            if (hasAttribute != null) {
                try {
                    var attributeValue = (long) hasAttribute.Properties[attributeName][0];
                    var asDate = DateTime.FromFileTimeUtc(attributeValue);
                    Console.WriteLine($"{attributeName}: Is a date ({asDate})");
                } catch (Exception e) {
                    Console.WriteLine($"{attributeName}: Not a date ({e.Message})");
                }
            } else {
                Console.WriteLine($"{attributeName}: Could not find an object with this attribute");
            }
        } catch (Exception e) {
            Console.WriteLine($"{attributeName}: Error searching ({e.Message})");
        }
    }
}

但是,即使这样也不完全可靠,因为0是有效的文件时间日期。

是否要查询AD架构以查找使用该类型的所有属性?或者,是否要基于其中一个用户(例如,具有特定lastLogon日期的所有用户)查询AD?根据架构进行查询以查找使用该类型的所有属性。Microsoft正在使用syntaxID 2.5.5.16作为时间戳和其他需要长整数的属性,如大小(KB或经纬度)。我特别想要获取存储时间戳的属性。这太笼统了,包括没有64位NT文件时间间隔值的属性。Microsoft正在使用Syntaxid2.5.5.16来表示时间戳和其他需要长整数的属性,如大小(KB或经纬度)。我特别想得到存储时间戳的属性。@SaeidOstad我明白了。没有可靠的方法可以做到这一点。我已经用最好的方法更新了我的答案,但不是100%。AD只是没有告诉你这些值是如何使用的。我希望得到一个更精确的解决方案。感谢您的解决方案,它将适用于大多数情况,但不适用于所有情况。