处理自定义Active Directory日期属性

时间:2018-10-12 18:05:33

标签: c# active-directory ldap schema directoryservices

我已经使用大整数/间隔类型的新属性扩展了我们的架构,以用作日期。这里有问题。一种是在ADUC中,属性显示为数字,而系统中其他日期(具有相同的基础类型)显示为日期。实际上,这似乎可以,因为它是整数。也许ADUC预先设置了一些强制显示为日期的属性?

另一个是我无法使用System.DirectoryServices.Accountmanagment以正确的方式处理此问题。我有一个扩展UserPrincipal的类,它很好用,但是添加此新属性将不起作用。当我尝试传递日期以及传递较长时间时,都会失败。

我不确定在AD模式过程中做错了什么,尽管我不确定这可能是什么。我曾尝试使用Google搜索,但到目前为止,我在任何文章中都没有发现任何类似的问题。

我非常害怕做一些会弄乱我的AD的事情,因此我想在此询问一些有关此的提示,尤其是日期。

编辑:

我进行了更多测试,并为AccountManagment.UserPrincipal扩展提供了解决方案。尽管“感到”奇怪:

    public DateTime? MyCustomDate
    {
        get
        {

            object[] result = this.ExtensionGet("my-custom-date");
            if (result != null && result.Length > 0)
            {
                if (result[0].GetType() == typeof(string))
                {
                    long l = 0;
                    return (long.TryParse(result[0].ToString(), out l) ? DateTime.FromFileTimeUtc(l) : (DateTime?)null);
                }
                else
                {
                    ActiveDs.IADsLargeInteger li = (ActiveDs.IADsLargeInteger)result[0];
                    return DateTime.FromFileTimeUtc(((long)li.HighPart << 32) + li.LowPart).ToLocalTime();
                }
            }
            else
                return null;
        }
        set
        {
            if (value != null)
                ExtensionSet("my-custom-date", ((DateTime)value).ToFileTimeUtc().ToString());
            else
                ExtensionSet("my-custom-date", null);
        }
    }

我尝试了不同的方法,但似乎只有ToString()方法有效。

所以我基本上可以正常工作了。此外,我尝试通过扩展accountExires的allready内置属性来进行此操作。我得到的行为完全相同,因此我相信我在AD中的属性是正确创建的。

编辑#2: 当属性值位于内存中时,如果属性值已由设置程序自行更改,则在属性的getter部分中进行类型检查。该值不再是com类型,而是字符串(很明显)

1 个答案:

答案 0 :(得分:0)

由于我今天已经在做更多的工作,看来我在编辑中的解决方案确实起作用。

公共DateTime? MyCustomDate {         得到         {

<button id="links">text content</button>