Добавить пользователя в исключение Active Directory при вызове функции сохранения на UserPrincipal

Я делаю приложение для небольших форм для добавления нового пользователя в Active Directory.

После создания PrincipalContext я создаю UserPrincipal и устанавливаю его свойства.

Когда я вызываю Save для UserPrincipal, возникает следующее исключение:

System.DirectoryServices.AccountManagement.PrincipalOperationException: запрошенный класс сведений о проверке недействителен. (Исключение из HRESULT: 0x80070544) ---> System.Runtime.InteropServices.COMException: запрошенный класс сведений о проверке недействителен.

Соответствующая часть кода ниже:

PrincipalContext principalContext = null;

try
{
    principalContext = new PrincipalContext(ContextType.Domain, 
        "abc.com", "OU=ouname,DC=abc,DC=com", ContextOptions.Negotiate, uName, pWord);
}
catch (Exception e)
{
    return "Failed to create PrincipalContext. Exception: " + e;
}

// Check if user object already exists in the store
UserPrincipal usr = UserPrincipal.FindByIdentity(principalContext, userLogonName);

if (usr != null)
{
    return userLogonName + " already exists. Please use a different User Logon Name.";
}

// Create the new UserPrincipal object
UserPrincipal userPrincipal = new UserPrincipal(principalContext);


if (lastName != null && lastName.Length > 0)
{ 
    userPrincipal.Surname = lastName;
}

if (firstName != null && firstName.Length > 0)
{
    userPrincipal.GivenName = firstName;
}

if (userLogonName != null && userLogonName.Length > 0)
{
    userPrincipal.EmailAddress = userLogonName + "@abc.com";
}

if (userLogonName != null && userLogonName.Length > 0)
{
    userPrincipal.SamAccountName = userLogonName;
    userPrincipal.UserPrincipalName = userLogonName;
}

string pwdOfNewlyCreatedUser = "abc123$$$!ABC";
userPrincipal.SetPassword(pwdOfNewlyCreatedUser);

userPrincipal.Enabled = true;
userPrincipal.ExpirePasswordNow();

try
{
    userPrincipal.Save();
}
catch (Exception e)
{
    return "Exception creating user object. " + e;
}

Отредактируйте для ясности: в этой строке ловится исключение: userPrincipal.Save();

Приведенный выше код был взят отсюда:

https://docs.microsoft.com/en-us/previous-versions/bb384369(v=vs.90)

Я не уверен, куда идти отсюда.

Изменить: Дальнейшее расследование указывает на настройку пароля. Если я удалю следующие строки, пользователь будет создан:

string pwdOfNewlyCreatedUser = "abc123$$$!ABC";
userPrincipal.SetPassword(pwdOfNewlyCreatedUser);

Но я не хочу удалять эти строки. Или, точнее, я не хочу не устанавливать пароль.


person I.M.    schedule 20.05.2021    source источник


Ответы (1)


Решил это. Точнее, поработали над этим.

Попробовав установить пароль разными способами, я остановился на простом и работающем способе.

Вместо

string pwdOfNewlyCreatedUser = "abc123$$$!ABC";
userPrincipal.SetPassword(pwdOfNewlyCreatedUser);

userPrincipal.Enabled = true;
userPrincipal.ExpirePasswordNow();

try
{
    userPrincipal.Save();
}
catch (Exception e)
{
    return "Exception creating user object. " + e;
}

Я делаю это:

userPrincipal.Enabled = true;

try
{
    userPrincipal.Save();

    userPrincipal.ChangePassword("", "abc123$$$!ABC");
    userPrincipal.ExpirePasswordNow();
    userPrincipal.Save();

}
catch (Exception e)
{
    return "Exception creating user object. " + e;
}

Подводя итог: SetPassword не работал, но после сохранения пользователя с помощью ChangePassword работает.

person I.M.    schedule 20.05.2021