2012-02-08 3 views
1

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

Я узнал, что меня интересует свойство 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 или к сожалению ...

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

ответ

0

Нашли решение, которое работает. Я взял код 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

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

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, это должно в основном сделать это, я думаю.

+0

Это не работает. Я могу успешно добавить первый ПК (если пользователь еще не имеет ограничения), но как только я попытаюсь добавить и зафиксировать второй или третий компьютер, я получаю «Указанный атрибут службы или значение уже существует». Я, очевидно, подтвердил в AD, что пользователь фактически не имеет этих назначений ПК. Есть идеи? – Boeckm

+0

Выяснил это marc_s. Проверьте мой ответ. Спасибо, что указал мне в правильном направлении! – Boeckm

Смежные вопросы