Как установить атрибут пользователя "вход в систему" в VB.NET - PullRequest
1 голос
/ 08 февраля 2012

Я работаю над обновлением решения в VB.NET, которое в значительной степени основано на Active Directory. На данный момент я пытаюсь добавить ограничение ПК для нового пользователя AD при создании пользователя. По сути, мне нужно обновить атрибут Logon To, чтобы включить 1 или более ПК, как мне это сделать?

Я узнал, что меня интересует свойство IADsUser "LoginWorkstations" (благодаря http://msdn.microsoft.com/en-us/library/Aa746340).. На данный момент у меня есть код, который может получить этот атрибут у любого пользователя AD, но я не могу его установить.

Вот код, который я должен получить для атрибута:

Dim userADObject As new DirectoryEntry(ADPath)
Dim logonToPC as String = userADObject.InvokeGet("LoginWorkstations")(0).ToString

Это приведет к получению первого компьютера с ограниченным доступом (если он есть) и сохранит его в logonToPC и будет выглядеть примерно так: "PC10000"

Это прекрасно работает, поэтому интуитивно я предполагаю, что что-то вроде этого будет работать:

Dim userADObject As new DirectoryEntry(ADPath)
Dim args() As Object = {"PC100001"}
userADObject.InvokeSet("LoginWorkstations", args)

Но это не работает ... Это просто довольно бесполезное исключение.

Я пытался протестировать этот подход с другим атрибутом, и он работает просто отлично. К сожалению, не так много в Google ...

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2012

Нашел решение, которое работает. Я взял код marc_s и немного изменил его для правильной работы. вот что у меня есть:

Dim userADObject As New DirectoryEntry(Me.ADPath)
'Grab the previous restriction, because we may have to clear it first in the future
Dim priorRestriction As String = userADObject.Properties("userWorkstations").Value

If priorRestriction = "" Then
     'Simply add
     userADObject.Properties("userWorkstations").Add("PC001,PC002")
Else
     'Important - We have to clear the old restriction before adding the new
     userADObject.Properties("userWorkstations").Remove(priorRestriction)
     'Now add the new restriction
     userADObject.Properties("userWorkstations").Add(priorRestriction & ",PC003")
End If
'Commit!
userADObject.CommitChanges()

Что-то, что дало мне довольно хорошее горе, что у тебя не может быть пробела в добавляемой строке. Пример: .Add("PC001, PC002") должно быть .Add("PC001,PC002")

0 голосов
/ 08 февраля 2012

Вы должны быть в состоянии сделать это довольно легко - также: обратите внимание, что вы должны использовать атрибут userWorkstations LDAP ( см. Примечание здесь ) - это многозначное значение, например, он допускает несколько записей.

Dim userADObject As new DirectoryEntry(ADPath)

userADObject.Properties("userWorkstations").Add("PC001")
userADObject.Properties("userWorkstations").Add("PC002")
userADObject.Properties("userWorkstations").Add("PC003")

userADObject.CommitChanges()

Если у вас есть необходимые разрешения для обновления Active Directory, я думаю, это должно быть сделано.

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