2010-08-06 5 views
0

Привет, Я пытаюсь создать приложение VB.NET, которое (надеюсь) сократит время, затрачиваемое на некоторые вызовы службы поддержки моих отделов. Часть, за которой я застрял, заключается в том, как использовать VB.NET для удаления пользователя из группы. Следующий код, который я играл с:VB.NET Удалить пользователя из активного каталога

Public Shared Sub RemoveUserFromGroup(ByVal deUser As String, ByVal GroupName As String) 
    Dim entry As DirectoryEntry = ADEntry() 
    Dim mySearcher As DirectorySearcher = New DirectorySearcher(entry) 

    mySearcher.Filter = "(&(ObjectClass=Group)(CN=" & GroupName & "))" 
    mySearcher.PropertiesToLoad.Add("OrganizationalUnit") 
    mySearcher.PropertiesToLoad.Add("DistinguishedName") 
    mySearcher.PropertiesToLoad.Add("sAMAccountName") 

    Dim searchResults As SearchResultCollection = mySearcher.FindAll() 
    If searchResults.Count > 0 Then 
     Dim group As New DirectoryEntry(searchResults(0).Path) 
     Dim members As Object = group.Invoke("Members", Nothing) 
     For Each member As Object In CType(members, IEnumerable) 
      Dim x As DirectoryEntry = New DirectoryEntry(member) 
      MessageBox.Show(x.Properties("sAMAccountName").Value) 
      If x.Properties("sAMAccountName").Value = deUser Then 
       MessageBox.Show(searchResults.Item(0).Path.ToString) 
       MessageBox.Show(x.Properties("sAMAccountName").Value) 
       'group.Invoke("Remove", New Object() {x.Properties("OrganizationalUnit").Value}) 
       group.Properties("member").Remove(x.Properties("OrganizationalUnit").Value) 
      End If 

     Next 
    End If 

Когда я запускаю программу, я recevie COMException было необработанное, неизвестная ошибка в строке group.properties. При использовании group.invoke я получаю ошибку. TargetInvocationException был необработанным.

Моя цель - передать в качестве строки имя пользователя (sAMAccountName) и имя_группы (sAMAccountName) функции, которая найдет пользователя и удалит их из группы.

Я новичок в VB.NET и буду признателен за любую помощь, которую люди могут предоставить.

Я кодирую в .NET 2.0, так как я не уверен, что на сервере, на котором он будет жить, будет установлен 3.5.

+0

Дайте нам сообщение об ошибке и HResult из Исключения COM. Попробуйте: [code]: Catch ex как System.DirectoryServices.DirectoryServicesCOMException: msgbox (ex.Message() & ex.HResult() & ex.ErrorCode()): End Try – 2010-08-06 14:56:30

+0

При добавлении Try ... Catch у вас есть рекомендуется, что COM Exception все еще происходит, и окно сообщения не появляется. Я изменил линию catch, чтобы быть Catch ex As System.Exception, и это просто отображает окно сообщения с текстом «Unspecified Error -2147467259». Я рассмотрю эту ошибку и посмотрю, что я могу найти. Thanks, Мэтт – Lima

ответ

1

Ну сообщение об ошибке 0x80004005 E_FAIL Unspecified failure не очень полезно. Я часто расстраиваюсь при работе с Active Directory.

Попробуйте изменить линию:

group.Properties("member").Remove(x.Properties("OrganizationalUnit").Value) 

в

group.Invoke("Remove", New Object() {x.Path.ToString()}) 

Если вам нужно больше опорного взглянуть на эту статью на VB.net Heaven Эрикой Ehrli. В статье рассматриваются различные варианты использования Active Directory.

Я надеюсь, что это поможет.

+0

с использованием x.path.tostring() работал отлично. После многих дней и бесчисленных вариаций кода здорово окончательно завершить этот небольшой аспект кода. Большое спасибо за предоставление вашей помощи, это всегда очень ценится. – Lima

+0

Добро пожаловать. Я понимаю разочарование Active Directory и COM. – 2010-08-08 03:29:21