Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Visual Basic 2010 - Alle Gruppen aus der Active Directory auflisten, aber wie?

Frage Entwicklung Visual Studio

Mitglied: iVirusYx

iVirusYx (Level 2) - Jetzt verbinden

19.06.2012, aktualisiert 10:39 Uhr, 4862 Aufrufe, 3 Kommentare

Hallo liebe Administratoren,
ich versuche mich mal wieder am programmieren und versuche aus Beispielen im Internet zu lernen.

Ich habe mir diesmal zur Aufgabe gesetzt mit der Active Directory zu arbeiten und diese in einem ersten Schritt zu durchsuchen. Ich habe es schon fertig gebracht mit "DirectorySearcher" eine Telefon-Nummer anhand von Vor- und Nachnamen zu finden. Oder herauszufinden ob eine EmployeeID schon vergeben ist, etc...

Nun versuche ich sämtliche Gruppen in unserer Domäne zu suchen und diese dann in einer ListBox aufzulisten. Ich habe folgenden Code gefunden, jedoch kriege ich ihn nicht zu meinen wünschen umgewandelt und verstehe ihn nicht ganz.
Wenn ich ihn so wie unten angegeben ausführe, dann klappt es tadellos, jedoch setze ich die "For Each group As String..." Befehlszeilen in einen Button_Click dann kriege ich einen "NullReferenceException" Fehler.

Was macht eigentlich der "Debug.Print"-Befehl? Wie kann ich den Code so umschreiben dass er mir alle Gruppen in eine ListBox schreibt?

Ich brauche nicht unbedingt eine direkte Lösung, aber einen Hinweis in die richtige Richtung wäre nett, am besten aber auf Deutsch...

Und dann versuche ich den nächsten Schritt: Nur die "Global Groups" raus filtern....

Danke für eure Hilfe und euren Rat.

MFG
iVirus


01.
Imports System.DirectoryServices 
02.
 
03.
Public Class Form1 
04.
 
05.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
06.
    For Each group As String In GetGroups() 
07.
        Debug.Print(group) 
08.
    Next 
09.
End Sub 
10.
 
11.
Public Function GetGroups() As List(Of String) 
12.
    Dim objADAM As DirectoryEntry                   ' Binding object. 
13.
    Dim objGroupEntry As DirectoryEntry             ' Group Results. 
14.
    Dim objSearchADAM As DirectorySearcher          ' Search object. 
15.
    Dim objSearchResults As SearchResultCollection  ' Results collection. 
16.
    Dim strPath As String                           ' Binding path. 
17.
    Dim result As New List(Of String) 
18.
 
19.
    ' Construct the binding string.         
20.
    strPath = "LDAP://stefanserver.stefannet.local" 'Change to your ADserver 
21.
 
22.
    ' Get the AD LDS object. 
23.
    Try 
24.
        objADAM = New DirectoryEntry(strPath) 
25.
        objADAM.RefreshCache() 
26.
    Catch e As Exception 
27.
        Throw e 
28.
    End Try 
29.
 
30.
    ' Get search object, specify filter and scope, 
31.
    ' perform search. 
32.
    Try 
33.
        objSearchADAM = New DirectorySearcher(objADAM) 
34.
        objSearchADAM.Filter = "(&(objectClass=group))" 
35.
        objSearchADAM.SearchScope = SearchScope.Subtree 
36.
        objSearchResults = objSearchADAM.FindAll() 
37.
    Catch e As Exception 
38.
        Throw e 
39.
    End Try 
40.
 
41.
    ' Enumerate groups 
42.
    Try 
43.
        If objSearchResults.Count <> 0 Then 
44.
            Dim objResult As SearchResult 
45.
            For Each objResult In objSearchResults 
46.
                objGroupEntry = objResult.GetDirectoryEntry 
47.
                result.Add(objGroupEntry.Name) 
48.
            Next objResult 
49.
        Else 
50.
            Throw New Exception("No groups found") 
51.
        End If 
52.
    Catch e As Exception 
53.
        Throw New Exception(e.Message) 
54.
    End Try 
55.
 
56.
    Return Nothing 
57.
End Function 
58.
End Class
Mitglied: DerWoWusste
19.06.2012 um 10:45 Uhr
Ich hätte da ein schönes VBscript, was Du als Gruppen.hta speichern kannst. Teste mal
01.
<Html> 
02.
<Head> 
03.
<Title>List Group Members</Title> 
04.
  
05.
<HTA:Application 
06.
Caption = Yes 
07.
Border = Thick 
08.
ShowInTaskBar = Yes 
09.
SingleInstance = Yes 
10.
MaximizeButton = Yes 
11.
MinimizeButton = Yes> 
12.
  
13.
<script Language = VBScript> 
14.
  
15.
	Sub Window_OnLoad 
16.
		intWidth = 800 
17.
		intHeight = 600 
18.
		Me.ResizeTo intWidth, intHeight 
19.
		Me.MoveTo ((Screen.Width / 2) - (intWidth / 2)),((Screen.Height / 2) - (intHeight / 2)) 
20.
		lst_members.Style.Width = 500 
21.
    	Set objRootDSE = GetObject("LDAP://RootDSE") 
22.
    	strBaseConnString = objRootDSE.Get("defaultNamingContext") 
23.
		Set objOULevel = GetObject("LDAP://" & strBaseConnString) 
24.
		EnumerateGroups strBaseConnString 
25.
		Show_Group_Selection 
26.
	End Sub 
27.
  
28.
	Sub Clear_Members 
29.
		For intListProgress = 1 To lst_members.Length 
30.
	   		lst_members.Remove 0 
31.
	   	Next 
32.
	End Sub 
33.
  
34.
	Sub EnumerateGroups(strDNSDomain) 
35.
		Const ADS_SCOPE_SUBTREE = 2 
36.
		Const adVarChar = 200 
37.
		Const MaxCharacters = 255 
38.
		 
39.
		Set objConnection = CreateObject("ADODB.Connection") 
40.
		Set objCommand =   CreateObject("ADODB.Command") 
41.
		objConnection.Provider = "ADsDSOObject" 
42.
		objConnection.Open "Active Directory Provider" 
43.
		Set objCommand.ActiveConnection = objConnection 
44.
		 
45.
		objCommand.Properties("Page Size") = 1000 
46.
		objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE  
47.
		 
48.
		objCommand.CommandText = "SELECT Name, distinguishedName FROM 'LDAP://" & strDNSDomain & "' WHERE objectClass='group'" 
49.
		Set objRecordSet = objCommand.Execute 
50.
		 
51.
		Set objDataList = CreateObject("ADOR.Recordset") 
52.
		objDataList.Fields.Append "name", adVarChar, MaxCharacters 
53.
		objDataList.Fields.Append "distinguishedName", adVarChar, MaxCharacters 
54.
		objDataList.Open 
55.
		 
56.
		While Not objRecordSet.EOF 
57.
		    objDataList.AddNew 
58.
		    objDataList("name") = objRecordSet.Fields("name").Value 
59.
		    objDataList("distinguishedName") = objRecordSet.Fields("distinguishedName").Value 
60.
		    objDataList.Update 
61.
			objRecordSet.MoveNext 
62.
		Wend 
63.
		objRecordSet.Close 
64.
		objDataList.Sort = "name" 
65.
		objDataList.MoveFirst 
66.
		While Not objDataList.EOF 
67.
			Set objActiveOption = Document.CreateElement("OPTION") 
68.
    		objActiveOption.Text = objDataList.Fields("name").Value 
69.
	    	objActiveOption.Value = objDataList.Fields("distinguishedName").Value 
70.
	    	lst_GroupFilter.Add objActiveOption 
71.
	    	objDataList.MoveNext 
72.
		Wend 
73.
		objDataList.Close 
74.
	End Sub 
75.
  
76.
	Sub Show_Group_Selection 
77.
		span_GroupFilter.InnerHTML = lst_GroupFilter.Value 
78.
	End Sub 
79.
  
80.
	Sub Default_Buttons 
81.
		If Window.Event.KeyCode = 13 Then 
82.
			btn_run.Click 
83.
		End If 
84.
	End Sub 
85.
  
86.
	Sub Exit_HTA 
87.
		Window.Close 
88.
	End Sub 
89.
  
90.
	Sub Get_Members 
91.
		Const adVarChar = 200 
92.
		Const MaxCharacters = 255 
93.
 
94.
		Clear_Members 
95.
 
96.
		Set objGroup = GetObject("LDAP://" & lst_groupfilter.Value) 
97.
		Set objDataList = CreateObject("ADOR.Recordset") 
98.
		objDataList.Fields.Append "name", adVarChar, MaxCharacters 
99.
		objDataList.Fields.Append "distinguishedName", adVarChar, MaxCharacters 
100.
		objDataList.Open 
101.
		 
102.
		For Each objObject In objGroup.Members 
103.
		    objDataList.AddNew 
104.
		    objDataList("name") = objObject.cn 
105.
		    objDataList("distinguishedName") = objObject.distinguishedName 
106.
		    objDataList.Update 
107.
		Next 
108.
		objDataList.Sort = "name" 
109.
		If Not objDataList.BOF Then objDataList.MoveFirst 
110.
		While Not objDataList.EOF 
111.
			Set objMember = Document.CreateElement("OPTION") 
112.
    		objMember.Text = objDataList.Fields("name").Value 
113.
	    	objMember.Value = objDataList.Fields("distinguishedName").Value 
114.
	    	lst_members.Add objMember 
115.
	    	objDataList.MoveNext 
116.
		Wend 
117.
		objDataList.Close 
118.
	End Sub 
119.
	 
120.
	Sub ExporT_To_TXT 
121.
	    If Mid(document.location, 6, 3) = "///" Then 
122.
	    	strHTAPath = Mid(Replace(Replace(document.location, "%20", " "), "/", "\"), 9) 
123.
	    Else 
124.
	    	strHTAPath = Mid(Replace(Replace(document.location, "%20", " "), "/", "\"), 6) 
125.
	    End If 
126.
		strFileName = Left(strHTAPath, InStrRev(strHTAPath, "\")) & lst_GroupFilter.Item(lst_GroupFilter.SelectedIndex).Text & ".txt" 
127.
		strFileName = InputBox("Enter file name to save as:", "Save As", strFileName) 
128.
		If strFileName <> "" Then 
129.
			Set objFSO = CreateObject("Scripting.FileSystemObject") 
130.
			Set objFile = objFSO.CreateTextFile(strFileName, True) 
131.
			objFile.WriteLine "Group Distinguished Name: " & lst_groupfilter.Value 
132.
			For Each objOption In lst_members 
133.
				objFile.WriteLine objOption.Text 
134.
			Next 
135.
			objFile.Close 
136.
			MsgBox "File saved." 
137.
		End If 
138.
	End Sub 
139.
</script> 
140.
<body style="background-color:#B0C4DE;" onkeypress='vbs:Default_Buttons'> 
141.
	<table height="90%" width= "90%" border="0" align="center"> 
142.
		<tr> 
143.
			<td align="center" colspan="2"> 
144.
				<h2>List Group Members</h2> 
145.
			</td> 
146.
		</tr> 
147.
		<tr> 
148.
			<td> 
149.
				<b>Group Filter:</b> 
150.
			</td> 
151.
			<td> 
152.
			    <select size='1' name='lst_GroupFilter'  onChange='vbs:Show_Group_Selection'> 
153.
				</select> 
154.
			</td> 
155.
		</tr> 
156.
		<tr> 
157.
			<td colspan=2> 
158.
				<b>Group Selected:</b>&nbsp&nbsp&nbsp<span id='span_GroupFilter'></span> 
159.
			</td> 
160.
		</tr>		<tr> 
161.
			<td> 
162.
				<b>Members:</b> 
163.
			</td> 
164.
			<td> 
165.
			    <select size='8' name='lst_members'> 
166.
				</select> 
167.
			</td> 
168.
		</tr> 
169.
	</table> 
170.
	<table width= "90%" border="0" align="center"> 
171.
		<tr align="center"> 
172.
			<td> 
173.
				<button name="btn_run" id="btn_run" accessKey="G" onclick="vbs:Get_Members"><u>G</u>et Members</button> 
174.
			</td> 
175.
			<td> 
176.
				<button name="btn_export" id="btn_export" accessKey="E" onclick="vbs:Export_To_TXT"><u>E</u>xport to TXT</button> 
177.
			</td> 
178.
			<td> 
179.
				<button name="btn_exit" id="btn_exit" accessKey="x" onclick="vbs:Exit_HTA">E<u>x</u>it</button> 
180.
			</td> 
181.
		</tr> 
182.
	</table> 
183.
</body> 
184.
</head> 
185.
</html>
Quelle: RobSampson @experts-exchange.com
Bitte warten ..
Mitglied: 76109
19.06.2012 um 10:55 Uhr
Hallo iVirus!

Debug.Print ist eine Ausgabe in das Direkt-Fenster (Ansicht: Direktfenster) und ist sinnvoll, um z.B. eine Text-Block-Ausgabe anzusehen. Im Prinzip wie eine MsgBox-Ausgabe

Eine 'For Each'-Aufzählung funktioniert nur mit Objecten oder Arrays (As Object, As Variant)...

Gruß Dieter
Bitte warten ..
Mitglied: iVirusYx
19.06.2012, aktualisiert um 11:25 Uhr
Ich habe den Fehler selber gefunden
Der Programmierer der den Code veröffentlichen hat, der hat einen Fehler drin der das ganze ruiniert.

Und zwar schreibt er:
Return Nothing

Und es müsste sein:
Return result

Danke an Didi, ich hatte im Direkt-Fenster auch einen "NullReferenceException"-Fehler und war dann nachlesen was das heißt
Das Script gibt mir jetzt alle Gruppen zurück wie ich es wollte.

Hier ist die zusammen-geschnittene Kurzform ohne Fehlererkennung (Achtung! Really Dirty Code ahead! Werden den gleich aufräumen)

01.
    Public Function GetAllGroups() As List(Of String) 
02.
        Dim entry As DirectoryEntry = New DirectoryEntry("LDAP://youdomain") 
03.
        Dim search As New DirectorySearcher(entry) 
04.
        Dim objSearchResults As SearchResultCollection 
05.
        Dim objGroupEntry As DirectoryEntry 
06.
        Dim result As New List(Of String) 
07.
 
08.
        search.Filter = "(&(objectClass=group))" 
09.
        search.SearchScope = SearchScope.Subtree 
10.
        objSearchResults = search.FindAll() 
11.
 
12.
 
13.
        Dim objResult As SearchResult 
14.
        For Each objResult In objSearchResults 
15.
            objGroupEntry = objResult.GetDirectoryEntry 
16.
            result.Add(objGroupEntry.Name) 
17.
        Next objResult 
18.
 
19.
        Return result 
20.
    End Function 
21.
 
22.
    Private Sub frmForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
23.
        For Each group As String In GetAllGroups() 
24.
            Debug.Print(group) 
25.
        Next 
26.
    End Sub
Um nun das Ganze auf Knopfdruck in eine ListBox zu schreiben braucht man also nur folgenden Code:

01.
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
02.
         
03.
        For Each group As String In GetAllGroups() 
04.
            ListBox1.Items.Add(group) 
05.
        Next 
06.
 
07.
    End Sub
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
gelöst Active Directory CA öffentlich vertrauenswürdig machen, geht das? (2)

Frage von DeathangelCH zum Thema Windows Server ...

Windows Server
gelöst Active Directory File Extension - Associated Program (11)

Frage von adm2015 zum Thema Windows Server ...

Windows 8
gelöst Active Directory Default User.v2 Profile - Windows 8.1 Apps Error (4)

Frage von adm2015 zum Thema Windows 8 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...