Дополнительные поля Active Directrory C#

139
27 ноября 2018, 03:10

Всем привет, есть ли возможность при создание нового пользователя в АД, задать ему поле office? Все нужные мне поля, кроме этого есть в UserPrincipal. Он намного удобнее чем DirectoryEntry, хотел бы спросить у тех кто сталкивался с подобной проблемой как ее решить? Делал расширенный класс где через ExtensionSet устанавливал значение для physicalDeliveryOfficeName ( именно так называется атрибут, если задавать через проперти директриэнтри), но почему то метод Сейв вызывал ошибку. Помогите пожалуйста решить, через DirectoryEntry все работает.

код

using (PrincipalContext PC = new PrincipalContext(ContextType.Domain, "165.1.5.25",
"OU=Test,OU=Users,OU=Domain,dc=test,dc=dom", Environment.UserName, "admintest"))
        {
            using (UserPrincipal UsrP = new UserPrincipal(PC))
                try
                {
                    UsrP.Name = "testuser";
                    UsrP.SamAccountName = "testuser";
                    UsrP.GivenName = "Test";
                    UsrP.UserCannotChangePassword = false;
                    UsrP.PasswordNeverExpires = true;
                    UsrP.SetPassword("Qwerty123");
                    UsrP.Enabled = true;
                    UsrP.Description = "000";
                    UsrP.EmailAddress = "testuser@test.ru";
                    UsrP.VoiceTelephoneNumber = "2222";
                    UsrP.Surname = "User";
                    UsrP.DisplayName = "Test User";
                    UsrP.UserPrincipalName = "testuser@gfx.dom";
                    UsrP.Save();
                    UserPrincipal user = UserPrincipal.FindByIdentity(PC, "testuser");
                    GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "TEST_GROUP");
                    group.Members.Add(user);
                    group.Save();
                }
                catch (Exception ex)
                {
                    _Log(ex.Message);
                }
        }

данный код создает все без ошибки, но стоит изменить класс на UserPrincipalEx, вылетает System.InvalidOperationException: "Сервер не склонен обработать запрос. Сам класс

 [DirectoryRdnPrefix("CN")]
    [DirectoryObjectClass("Person")]
    public class UserPrincipalEx : UserPrincipal
    {
        public UserPrincipalEx(PrincipalContext context) : base(context)
        { }
        public UserPrincipalEx(PrincipalContext context,
                             string samAccountName,
                             string password,
                             bool enabled) : base(context, samAccountName, password, enabled)
        { }
        [DirectoryProperty("physicalDeliveryOfficeName")]
        public string Office
        {
            get
            {
                if (ExtensionGet("physicalDeliveryOfficeName").Length != 1)
                    return string.Empty;
                return (string)ExtensionGet("physicalDeliveryOfficeName")[0];
            }
            set { ExtensionSet("physicalDeliveryOfficeName", value); }
        }
    }
Answer 1

Ответ был куда проще, в МС12 пользователь называется user, а не person и изменив наследуемый класс [DirectoryObjectClass("Person")] на [DirectoryObjectClass("User")] я решил свою проблему, спасибо кто пытался помочь. Надеюсь мой ответ поможет избежать таких ошибок)

READ ALSO
Ошибка при сериализации DataGrid

Ошибка при сериализации DataGrid

После нажатия на кнопку, должно содержимое DataGrid должно экспортироваться в XML при помощи сериализации, но происходит ошибка:

156
Неполадка в работе стиля

Неполадка в работе стиля

Создал свой стиль чекбокса на основе стиля из сети (слайдер)Проблема в том, что если создать этот слайдер с дефолтным параметром IsChecked = true, то при...

153
Распарсить Xml ответ от сервера

Распарсить Xml ответ от сервера

От сервера приходит ответ

231
Работа с Photoshop из программы

Работа с Photoshop из программы

Задача такая: есть PSD файл, в нём есть шаблон с текстом и фото, их нужно изменитьТ

161