peacer
Goto Top

VB.NET Von allen Mitgliedern einer Gruppe sAMAccountName ausgeben

Ich möchte eigentlich alle Mitglieder einer Gruppe auslesen. Das ist an sich auch kein Problem, ich hatte dafür auch schon eine ganz gute Lösung, allerdings konnte ich mir über den Zugriff auf das Group-Attribut "Member" nicht den "sAMAccountName" ausgeben lassen. Der wäre für mich aber ausschlaggebend damit ich mit dem Ergebnis weiterarbeiten kann.

Dann habe ich mir überlegt alle User "anzufassen" und festzustellen ob sich in dem User-Attribut "MemberOf" die Gruppe befindet die ich in textBox18 eingegeben habe.

Mein Code schaut folgendermaßen aus, aber er funktioniert komischerweise nicht mit allen Gruppen und dauert natürlich ein paar sekunden länger. Hat jemand einen Verbesserungsvorschlag? Oder gar eine ganz neue Idee?

LG Peacer


Public Function GetGroupMember(ByVal domain As String, ByVal username As String, ByVal password As String, Optional ByRef exeption As Exception = Nothing) As Collections.Generic.List(Of String)
	
	Dim ADEntry As New DirectoryServices.DirectoryEntry("LDAP://" & domain, username, password)  
    	Dim objSearch As New System.DirectoryServices.DirectorySearcher(ADEntry)

    	Dim oResults As DirectoryServices.SearchResultCollection
    	Dim oResult As DirectoryServices.SearchResult
		
		Dim colEntry As New Collections.Generic.List(Of String)
		Try
    		objSearch.Filter = "(&(objectCategory=person)(objectClass=user))"  
   			oResults = objSearch.FindAll
			objsearch.PropertiesToLoad.Add("MemberOf")  
   		
   			For Each oResult In oResults
   				For i As Integer = 0 To oResult.Properties("MemberOf").Count - 1  
   					Dim sProp As String = oResult.Properties("MemberOf")(i)  
   					Dim s2Prop As String = sProp.Substring(3, sProp.IndexOf(",") - 3)  
   					If s2Prop.ToLower = textBox18.Text.ToLower Then
   						Dim UsrsAM As String = oResult.GetDirectoryEntry.Properties("sAMAccountName").Value  
   						Dim UsrCN As String = oResult.GetDirectoryEntry.Properties("cn").Value  
   						Dim UsrCNsAM As String = UsrsAM & ", " & UsrCN  
   						colEntry.Add(UsrCNsAM)
   						'Else  
   						'colEntry.Add("leer " & s2Prop)  
   					End If
   				Next
        		'Console.WriteLine(oResult.GetDirectoryEntry.Properties("sAMAccountName").Value)  
    		Next

		Catch ex As Exception
			exeption = ex
		
		Finally
			objsearch.Dispose()
		End Try
		Return colEntry
		
	End Function

Content-ID: 162959

Url: https://administrator.de/contentid/162959

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

Peacer
Peacer 21.03.2011 um 09:59:43 Uhr
Goto Top
Also ich kann mir die User mit folgender Function folgendermaßen ausgeben lassen.

Function:

Public Function GetGroupMember(ByVal domain As String, ByVal username As String, ByVal password As String, Optional ByRef exeption As Exception = Nothing) As Collections.Generic.List(Of String)
Dim searcher As DirectorySearcher = Nothing
		Dim colEntry As New Collections.Generic.List(Of String)
		
		Try
			searcher = New DirectorySearcher(New DirectoryEntry("LDAP://" & domain, username, password))  
			searcher.Filter = String.Concat("(&(objectClass=Group) (samAccountName=", textBox18.Text, "))")  
			searcher.PropertiesToLoad.Add("Member")  
			
			Dim result As SearchResult = searcher.FindOne
			For i As Integer = 0 To result.Properties("Member").Count - 1  
				Dim sProp As String = result.Properties("Member")(i)  
				colEntry.Add(sProp)
			Next
			
		Catch ex As Exception
			exeption = ex
			
		Finally
			searcher.Dispose()
		End Try
		Return colEntry
End Function

Output:

CN=Nachname\, Vorname,OU=User,OU=abc,DC=domain,DC=com

Kann ich mit diesen Daten pro User eine LDAP Abfrage starten womit ich dann den "sAMAccountName" ausgeben kann? Ist das sinnvoll?

Zur Info: eine Group hat bei uns bis zu 1200 Mitglieder...

Danke Peacer