Я расширил нашу схему новым атрибутом типа большое целое число / интервал, который будет использоваться в качестве даты.Здесь есть проблемы.Во-первых, в ADUC
атрибут отображается в виде числа, а другие даты в системе (с таким же базовым типом) отображаются в виде даты.На самом деле, это нормально, так как оно целое.Может быть, ADUC
имеет предустановленные некоторые атрибуты, которые он вынуждает показывать в виде дат?
Другое дело, что я не могу правильно обработать это с помощью System.DirectoryServices.Accountmanagment
.У меня есть класс, который расширяет UserPrincipal
, который работает нормально, но добавление этого нового атрибута не будет работать.Не удается, когда я пытаюсь передать дату, а также если я передаю длинную.
Я чувствую, что сделал что-то не так в процессе схемы AD
, хотя я не уверен, что это может быть.Я пробовал поискать в Интернете, но до сих пор я не нашел подобных проблем ни в одной статье.
Я очень боюсь сделать что-то, что испортит мой 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.Я получаю точно такое же поведение, поэтому я считаю, что мое свойство в AD создано правильно.
РЕДАКТИРОВАТЬ # 2: Проверка типа в разделе получателя свойства существует, когда значение свойства находится в памяти, если онобыло изменено самим свойством установщиком.Значение больше не типа com, но строка (очевидно)