Top-Themen

Aktuelle Themen (A bis Z)

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

VBS - Auslesen aller Gruppen einer OU samt Unter-OUs mit einigen Bedingungen

Frage Entwicklung VB for Applications

Mitglied: TuXHunt3R

TuXHunt3R (Level 3) - Jetzt verbinden

27.05.2009, aktualisiert 16:10 Uhr, 5126 Aufrufe, 12 Kommentare

Hallo ans Forum

Ich habe ein kleines Problem bei einem VBScript, welches ich für den Betrieb schreiben sollte. Hier der Code:

01.
Const ADS_SCOPE_SUBTREE = 10 
02.
Set objConnection = CreateObject("ADODB.Connection") 
03.
Set objCommand =   CreateObject("ADODB.Command") 
04.
objConnection.Provider = "ADsDSOObject" 
05.
objConnection.Open "Active Directory Provider" 
06.
Set objCommand.ActiveConnection = objConnection 
07.
objCommand.Properties("Page Size") = 1000 
08.
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE  
09.
 
10.
objCommand.CommandText = "SELECT AdsPath,samAccountName FROM 'LDAP://ou=Tralala,dc=beispiel,dc=ch' WHERE objectCategory='group'"   
11.
Set objRecordSet = objCommand.Execute 
12.
objRecordSet.MoveFirst 
13.
 
14.
Do Until objRecordSet.EOF 
15.
	if Instr(objRecordSet.Fields("samAccountName").Value, "D-") > 0 Then 
16.
		Gruppenname=objRecordSet.Fields("samAccountName").Value 
17.
		UserCounter = 0 
18.
		' Mitglieder zählen 
19.
		Set objGroup = GetObject(objRecordSet.Fields("AdsPath").Value) 
20.
		objGroup.GetInfo 
21.
 		arrMemberOf = objGroup.GetEx("member") 
22.
		For Each strMember in arrMemberOf 
23.
			UserCounter = UserCounter + 1 
24.
		Next 
25.
		if UserCounter < 2 Then 
26.
			'Owner auslesen 
27.
			Owner = GetOwner(objRecordSet.Fields("AdsPath").Value) 
28.
			wscript.echo Gruppenname & ";" & Owner 
29.
		End if 
30.
		 
31.
		 
32.
	End if 
33.
Loop 
34.
 
35.
'******************************************************************************************** 
36.
' Funktionen: 
37.
 
38.
Function GetOwner(adsPath) 
39.
	Set objGroup = GetObject(adsPath) 
40.
	Set objNtSecurityDescriptor = objGroup.Get("ntSecurityDescriptor") 
41.
	GetOwner = objNtSecurityDescriptor.Owner 
42.
End Function 
43.
 
Dieses Script soll folgendes machen:
Es soll rekursiv alle Unter-OUs von ou=Tralala,dc=beispiel,dc=ch' abgrasen und von jeder Gruppe, die mit "D-" beginnt und weniger als 2 Mitglieder hat, den Namen, die Anzahl Mitglieder und den Owner auslesen. Wenn ich das Script mit CScript in der CMD-Shell starte, kommt zwar keine Fehlermeldung, allerdings sieht die Ausgabe dann so aus:

01.
D-Gruppe1;Beispiel\User1 
02.
D-Gruppe1;Beispiel\User1 
03.
D-Gruppe1;Beispiel\User1 
04.
D-Gruppe1;Beispiel\User1 
05.
D-Gruppe1;Beispiel\User1 
06.
D-Gruppe1;Beispiel\User1 
07.
D-Gruppe1;Beispiel\User1 
08.
D-Gruppe1;Beispiel\User1 
09.
D-Gruppe1;Beispiel\User1 
10.
D-Gruppe1;Beispiel\User1 
11.
D-Gruppe1;Beispiel\User1 
12.
D-Gruppe1;Beispiel\User1 
13.
D-Gruppe1;Beispiel\User1 
14.
D-Gruppe1;Beispiel\User1 
15.
D-Gruppe1;Beispiel\User1 
16.
D-Gruppe1;Beispiel\User1 
17.
D-Gruppe1;Beispiel\User1 
18.
D-Gruppe1;Beispiel\User1 
19.
D-Gruppe1;Beispiel\User1 
20.
D-Gruppe1;Beispiel\User1 
21.
D-Gruppe1;Beispiel\User1 
22.
D-Gruppe1;Beispiel\User1 
23.
D-Gruppe1;Beispiel\User1 
24.
D-Gruppe1;Beispiel\User1 
25.
D-Gruppe1;Beispiel\User1 
26.
D-Gruppe1;Beispiel\User1 
27.
D-Gruppe1;Beispiel\User1 
28.
D-Gruppe1;Beispiel\User1 
29.
D-Gruppe1;Beispiel\User1 
30.
D-Gruppe1;Beispiel\User1 
31.
D-Gruppe1;Beispiel\User1
Es wird also dieselbe Gruppe mit demselben Owner unendlich mal angezeigt (so scheint es mir zumindest, ich habs nach einer Minute abgebrochen). Kann mir das einer erklären, rsp. eine Lösung anbieten? Ich werde daraus nicht schlau...


Grüsse aus der Schweiz
TuXHunT3R
Mitglied: 76109
27.05.2009 um 16:59 Uhr
Hallo TuXHunt3R,

am Ende Deiner Loop-Schleife fehlt ein <objRecordSet.MoveNext>

Gruß Dieter
Bitte warten ..
Mitglied: bastla
27.05.2009 um 17:12 Uhr
Hallo TuXHunt3R und didi1954!

Das eigentliche Problem sollte schon gelöst sein, daher nur noch zwei Anmerkungen:

Wenn der Gruppenname mit "D-" beginnen soll, wäre die genauere Abfrage
If UCase(Left(objRecordSet.Fields("samAccountName").Value, 2)) = "D-" Then
Die Anzahl der Gruppenmitglieder sollte sich etwas direkter auch mit
UserCounter = UBound(objGroup.GetEx("member")) + 1
bestimmen lassen (mit einem On Error Resume Next davor für den Fall, dass die Gruppe keine Mitglieder hat) ...

Grüße
bastla
Bitte warten ..
Mitglied: TuXHunt3R
27.05.2009 um 20:44 Uhr
am Ende Deiner Loop-Schleife fehlt ein <objRecordSet.MoveNext>

Mein Gott, bin ich dämlich....... Ich habe sicher eine Stunde nach dem Fehler gesucht und übersehe so einen besch** MoveNext. Herzlichen Dank jedenfalls.

Wenn der Gruppenname mit "D-" beginnen soll, wäre die genauere Abfrage
Danke für den Hinweis, aber die Gross/Kleinschreibung ist egal.


mit einem On Error Resume Next davor für den Fall, dass die Gruppe keine Mitglieder hat
Guter Tipp, ich werde aber sehen, dass ich das irgendwie anders abfangen kann, z.B. mit einer weiteren Iteration.


Ich lass den Beitrag mal noch offen. Ich werde es morgen im Geschäft ausprobieren, gebe dann Feedback und poste das funktionierende Script.
Bitte warten ..
Mitglied: bastla
27.05.2009 um 21:07 Uhr
Hallo TuXHunt3R!
... die Gross/Kleinschreibung ist egal.
Dir vielleicht , aber VBS unterscheidet da sehr wohl.

Das "genauer" bezog sich allerdings mehr auf die Tatsache, dass mit InStr() im gesamten Text gesucht wird, während Left() nur den Anfang des Strings betrachtet ...

Wie sehr Du Dich auf die Richtigkeit der Gruppennamen verlassen kannst bzw willst (und daher die genannten Aspekte tatsächlich nicht zum Tragen kommen sollten), musst Du natürlich selbst entscheiden.

Grüße
bastla
Bitte warten ..
Mitglied: 76109
27.05.2009 um 22:56 Uhr
Hallo TuXHunt3R und bastla!

Zitat von TuXHunt3R:
Mein Gott, bin ich dämlich....... Ich habe sicher eine Stunde
nach dem Fehler gesucht und übersehe so einen besch** MoveNext.
Tja, manchmal sieht man den Wald vor lauter Bäumen nicht
Danke für den Hinweis, aber die Gross/Kleinschreibung ist egal.
Ist nur egal, wenn Du die Option TextCompare angibst (Default=vbBinaryCompare):
01.
if Instr(1, objRecordSet.Fields("samAccountName").Value, "D-", vbTextCompare) > 0

Gruß Dieter

[Edit] Aufgrund des Hinweises von bastla, die Startposition noch eingefügt, weil diese
bei Angabe der Vergleichsart auch angegeben werden muss (sonst optional).[/Edit]
Bitte warten ..
Mitglied: bastla
27.05.2009 um 23:27 Uhr
... was allerdings einerseits noch immer nicht nur den Anfang des Strings vergleicht und andererseits nur funktioniert, wenn Du auch eine Startposition angibst:
If InStr(1, objRecordSet.Fields("samAccountName").Value, "D-", vbTextCompare) > 0 Then
Grüße
bastla
Bitte warten ..
Mitglied: 76109
28.05.2009 um 00:00 Uhr
Hallo bastla!

Zitat von bastla:
... was allerdings einerseits noch immer nicht nur den Anfang des Strings vergleicht
und andererseits nur funktioniert, wenn Du auch eine Startposition angibst:
Wieso denn? Die Startposition ist optional und wird sie nicht angegeben, dann ist die Startposition das 1. Zeichen

Allerdings hast Du insoweit Recht, dass ein "D-" auch an anderer Stelle im Suchstring gefunden werden könnte. In dem Fall müsste der Vergleich If InStr(...) = 1 Then.... heissen.

Aber von dem abgesehen, würde ich persönlich auch UCase(Left..) verwenden.

Gruß Dieter
Bitte warten ..
Mitglied: bastla
28.05.2009 um 00:08 Uhr
@76109
Die Startposition ist optional und wird sie nicht angegeben, dann ist die Startposition das 1. Zeichen
... es sei denn, die MS-Doku wäre korrekt: "The start argument is required if compare is specified."

Grüße
bastla
Bitte warten ..
Mitglied: 76109
28.05.2009 um 00:12 Uhr
Hallo bastla!

Aja, stimmt. Wenn Vergleich angegeben wird, dann muss auch die Startposition angegeben werden.

Werde es oben ändern.

Gruß Dieter
Bitte warten ..
Mitglied: bastla
28.05.2009 um 00:21 Uhr
Auch ein Test mit
WScript.Echo InStr("Versuch", "U", vbTextCompare)
vs
WScript.Echo InStr(1, "Versuch", "U", vbTextCompare)
spricht dafür, dass der Wert wohl anzugeben ist ...

Grüße
bastla
Bitte warten ..
Mitglied: 76109
28.05.2009 um 00:29 Uhr
Hallo nochmal,

äh, hab ich doch schon geschrieben oder warst Du wieder zu schnell, während ich meine Antwort noch mal geändert hatte?

Gruß Dieter
Bitte warten ..
Mitglied: bastla
28.05.2009 um 00:32 Uhr
warst Du wieder zu schnell, während ich meine Antort noch mal geändert hatte?
Ausnahmsweise ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Windows 7
Computer OU auslesen bzw. abfragen
Frage von mexx991Windows 72 Kommentare

Hallo zusammen, gibt es eine Möglichkeit direkt am Client per Powershell oder CMD-Konsole die OU des Computers abzufragen? Vielen ...

Windows Userverwaltung
AD Gruppen User auslesen
Frage von pgWindows Userverwaltung1 Kommentar

Guten Tag, ich bin auf der Suche nach einem Programm welches mit die User eines AD ausliest und mir ...

VB for Applications
VBS - Vor- und Nachnamen auslesen
Frage von Ah3n0bar6usVB for Applications2 Kommentare

Ich könnte noch einmal (teuren) Rat gebracuhen. Ich versuche mir dem u.a. Script den kompletten Namen eines Nutzers vom ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen
Frage von joni2000deBatch & Shell4 Kommentare

Hallo zusammen, ich lese mit folgendem Code das Eventlog aus um die Druckjobs zu ermitteln. Das funktioniert auf dem ...

Neue Wissensbeiträge
Erkennung und -Abwehr

Necur-Botnet soll Erpressungstrojaner Scarab massenhaft verbreiten

Information von BassFishFox vor 2 StundenErkennung und -Abwehr

12,5 Millionen Spam-Mails aus einem Bot-Netz mit 6 Millionen Computern? Eigentlich eine schwache Leistung. Die Erpresser setzen dabei auf ...

Microsoft

Nadeldrucker-Problem unter Windows - Microsoft liefert Updates

Information von BassFishFox vor 3 StundenMicrosoft

Hat ja nicht lange gedauert. Nachdem die November-Updates für Windows 7, 8.1 und 10 zahlreiche Nadeldrucker lahmgelegt hatten, stellt ...

Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 10 StundenLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Heiß diskutierte Inhalte
Linux
Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde
Information von FrankLinux14 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing14 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Windows Server
Kann man im KMS nachschauen , wieviele Clients den Key in Anspruch genommen haben
gelöst Frage von rainergugusWindows Server12 Kommentare

Hallo, wir haben einen KMS Windows 10 Key. Dieser ist ja W7 kompatibel. Aber unser Windows 7 Pool registriert ...