Как установить атрибут AD «пользователь не может сменить пароль» - PullRequest
2 голосов
/ 17 февраля 2012

Я пытаюсь выяснить, как установить атрибут «Пользователь не может сменить пароль» в AD с помощью VB.NET.

Изначально я надеялся использовать флаги UserAccountControl, найденные здесь http://support.microsoft.com/kb/305144, но я понял, что вы не можете установить флаг PASSWD_CANT_CHANGE, как можно было ожидать. Это привело меня к этой публикации Запрещение пользователю Active Directory изменять свой пароль с помощью DirectoryServices , но я не могу заставить работать сохранение.

Вот код, который у меня есть сейчас.

        Dim domainContext As PrincipalContext = New PrincipalContext(ContextType.Domain)
        Dim user As UserPrincipal = UserPrincipal.FindByIdentity(domainContext, "user5")
        user.UserCannotChangePassword = True
        user.Save(domainContext)

Каждый раз, когда я пытаюсь сохранить это, я получаю InvalidOperationException. Документация для этого также не слишком полезна: http://msdn.microsoft.com/en-us/library/bb335863.aspx

Что странно для меня, так это то, что если я задаю другой атрибут этого объекта UserPrincipal, такой как SamAccountName, сохранение работает нормально, но как только я ввожу этот атрибут UserCannotChangePassword, сохранение завершится неудачей.

Я проверил, что пользователь, которого я использую для выполнения этого действия, имеет надлежащие привилегии, но я не уверен, куда идти ... Есть идеи?

1 Ответ

1 голос
/ 20 февраля 2012

Нашел способ старой школы, спасибо, что указали мне правильное направление @juergen d.Думаю, мне придется уладить.

        Dim objThisUser As IADs
        Dim intUserFlags As Integer

        ' Bind to the user object with the current credentials.
        objThisUser = GetObject("WinNT://" + gstrDomain + "/" + "user5")

        intUserFlags = objThisUser.Get("userFlags")

        'can't change
        intUserFlags = intUserFlags Or ADS_UF_PASSWD_CANT_CHANGE

        ' Modify the userFlags property.
        objThisUser.Put("userFlags", intUserFlags)

        ' Commit the changes
        objThisUser.SetInfo()

Я все время был близок к тому, чтобы найти идеальное решение, но просто не мог заставить сэкономить работать.Это прекрасно работает, я думаю.Использование этого означает лишь несколько строк кода и немного меньшую адаптивность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...