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

VBS LDAP - Auslesen ob Benutzerkonto deaktiviert ist, wenn nicht...

Frage Entwicklung

Mitglied: DemseinAdmin

DemseinAdmin (Level 1) - Jetzt verbinden

23.11.2009 um 08:40 Uhr, 8249 Aufrufe, 10 Kommentare

soll der Benutzer zur Anzahl der Mitglieder einer Gruppe addiert werden.

Hallo zusammen,

ich habe da noch ein Problem mit einem Skript von mir. Ziel ist es, alle Benutzer in den Gruppen einer bestimmten OU auszulesen und in eine Textdatei zu schreiben.

Hier mein bisheriger Code:

01.
Option Explicit 
02.
 
03.
Dim GROUP, OUNIT, DOMAENE, FSO, RESULTFILE, SOURCEFILE, LIST, RESULT, ANZ, ARRMEMBEROF, MEMBER 
04.
 
05.
Set FSO = CreateObject("Scripting.FileSystemObject") 
06.
RESULTFILE = "dat\result.txt" 
07.
Set RESULT = FSO.OpenTextFile(RESULTFILE, 2) 
08.
 
09.
RESULT.WriteLine("+++BEGINN RESSOURCENGRUPPEN+++") 
10.
 
11.
'+++++++++++++++++++++++++++++++++++ 
12.
'Ressourcen-Gruppen Quelle festlegen 
13.
SOURCEFILE = "dat\ou_res.txt" 
14.
OUNIT = "res" 
15.
'+++++++++++++++++++++++++++++++++++ 
16.
 
17.
If FSO.FileExists(SOURCEFILE) Then 
18.
	Set LIST = FSO.OpenTextFile(SOURCEFILE, 1) 
19.
	Do While Not (LIST.AtEndOfStream) 
20.
		On Error Resume Next 
21.
		GROUP = LIST.ReadLine 
22.
		Set DOMAENE = GetObject("LDAP://blablablubb") 
23.
		ANZ = 0 
24.
		ARRMEMBEROF = DOMAENE.GetEx("member") 
25.
		If (Err.Number = 0) Then  
26.
			ANZ  = UBound(ARRMEMBEROF) + 1  
27.
		End If 
28.
		On Error GoTo 0 
29.
		If (ANZ >= 1) then 
30.
			RESULT.WriteLine(GROUP) 
31.
			For Each MEMBER In ARRMEMBEROF 
32.
				RESULT.WriteLine(MEMBER) 
33.
			Next 
34.
		Else 
35.
			RESULT.WriteLine(GROUP) 
36.
		End If 
37.
	Loop 
38.
	Set LIST = Nothing 
39.
End If 
40.
 
41.
RESULT.WriteLine("+++ENDE RESSOURCENGRUPPEN+++") 
42.
RESULT.WriteLine("+++BEGINN USERGRUPPEN+++") 
43.
 
44.
'+++++++++++++++++++++++++++++++++++ 
45.
'User-Gruppen Quelle festlegen 
46.
SOURCEFILE = "dat\ou_usr.txt" 
47.
OUNIT = "usr" 
48.
'+++++++++++++++++++++++++++++++++++ 
49.
 
50.
If FSO.FileExists(SOURCEFILE) Then 
51.
	Set LIST = FSO.OpenTextFile(SOURCEFILE, 1) 
52.
	Do While Not (LIST.AtEndOfStream) 
53.
		On Error Resume Next 
54.
		GROUP = LIST.ReadLine 
55.
		Set DOMAENE = GetObject("LDAP://blablablubb") 
56.
		ANZ = 0 
57.
		ARRMEMBEROF = DOMAENE.GetEx("member") 
58.
		If (Err.Number = 0) Then  
59.
			ANZ  = UBound(ARRMEMBEROF) + 1  
60.
		End If 
61.
		On Error GoTo 0 
62.
		If (ANZ >= 1) then 
63.
			RESULT.WriteLine(GROUP & ";" & ANZ) 
64.
		Else 
65.
			RESULT.WriteLine(GROUP & ";0") 
66.
		End If 
67.
	Loop 
68.
	Set LIST = Nothing 
69.
End If 
70.
 
71.
RESULT.WriteLine("+++ENDE USERGRUPPEN+++") 
72.
 
73.
Set LIST = Nothing 
74.
Set RESULT = Nothing 
75.
Set FSO = Nothing 
76.
Set DOMAENE = Nothing
So weit so gut, mit der Funktion GetEx() klappt das auch. Allerdings muss ich nun die deaktivierten Benutzer aus den Gruppen von der Anzahl subtrahieren, bzw. gar nicht erst berücksichtigen.
Wie man einen Benutzer deaktivieren kann, habe ich mir schon angesehen, nur leider habe ich keine Antwort auf meine Frage gefunden.

Hat jemand eine Idee? Gerne mit Beispiel anhand des obigen Quellcodes.


Gruß
Simon
Mitglied: TsukiSan
23.11.2009 um 08:54 Uhr
nur leider habe ich keine Antwort auf meine Frage gefunden.

Hat jemand eine Idee?

Ist das die Frage?
Bitte warten ..
Mitglied: DemseinAdmin
23.11.2009 um 09:05 Uhr
Nein, die Frage ist: Wie vermehren sich kernlose Orangen?
Bitte warten ..
Mitglied: bastla
23.11.2009 um 09:23 Uhr
Hallo DemseinAdmin und TsukiSan!

Nachdem Ihr die Frage, was die Frage ist, geklärt habt, könntet Ihr das folgende Stück Code testen:
01.
Set DOMAENE = GetObject("LDAP://blablablubb") 
02.
ARRMEMBEROF = DOMAENE.GetEx("member") 
03.
ANZ = 0 
04.
For i = 0 To UBound(ARRMEMBEROF) 
05.
    Set User = GetObject("LDAP://" & ARRMEMBEROF(i)) 
06.
    If Not User.AccountDisabled Then 
07.
        ANZ = ANZ + 1 
08.
        'WScript.Echo User.sAMAccountName 
09.
    End If 
10.
Next 
11.
WScript.Echo ANZ
Grüße
bastla
Bitte warten ..
Mitglied: DemseinAdmin
23.11.2009 um 10:19 Uhr
Hallo bastla,

das schaut schon sehr gut aus! Vielen Dank erst einmal.
Ich konnte folgenden Code nur kurz antesten, da mir grade die Zeit fehlt:

01.
If FSO.FileExists(SOURCEFILE) Then 
02.
	Set LIST = FSO.OpenTextFile(SOURCEFILE, 1) 
03.
	Do While Not (LIST.AtEndOfStream) 
04.
		On Error Resume Next 
05.
		GROUP = LIST.ReadLine 
06.
		Set DOMAENE = GetObject("LDAP://blabla) 
07.
		ANZ = 0 
08.
		ARRMEMBEROF = DOMAENE.GetEx("member") 
09.
		If (Err.Number = 0) Then 
10.
			For i = 0 to UBound(ARRMEMBEROF) 
11.
				Set USER = GetObject("LDAP://blabla CN=" & ARRMEMBEROF(i)) 
12.
				If Not USER.AccountDisabled Then 
13.
					ANZ = ANZ + 1 
14.
				End If 
15.
			Next 
16.
		End If 
17.
		On Error GoTo 0 
18.
		If (ANZ >= 1) then 
19.
			RESULT.WriteLine(GROUP & ";" & ANZ) 
20.
		Else 
21.
			RESULT.WriteLine(GROUP & ";0") 
22.
		End If 
23.
	Loop 
24.
	Set LIST = Nothing 
25.
End If
Allerdings spuckt er mir eine maximale Anzahl von einem Benutzer aus. Also entweder 0 oder 1, obwohl es z.B. 1500 Benutzer wären. Wahrscheinlich habe ich irgendwo einen flüchtigen Fehler gemacht, aber melde mich morgen noch mal dazu, falls ich nicht fündig geworden bin.

Vielen Dank soweit!

Gruß
Simon
Bitte warten ..
Mitglied: TsukiSan
24.11.2009 um 02:39 Uhr
Hallo DemseinAdmin,

das ist erklärbar.

in Zeile 3 startest du eine While Do - Schleife und in Zeile 7 setzt du permanent die Variable "Anz" auf NULL.
Setze besser Anz vor die Zeile 3, so ähnlich, wie bastla es schon in seinem Codeschnippsel getan hat.
Dann müsstest du über die EINS hinauskommen.

Gruss
Tsuki
Bitte warten ..
Mitglied: DemseinAdmin
24.11.2009 um 08:28 Uhr
Moin, moin,

naja das ist nicht ganz richtig, denn wenn ich die Anzahl nicht in der Schleife auf NULL setze, zählt er die Mitglieder gruppenübergreifend hoch.
Jede Zeile dich ich einlese, steht ja für eine Gruppe.

Gruß
Simon
Bitte warten ..
Mitglied: DemseinAdmin
24.11.2009 um 08:47 Uhr
Ja gut, es war natürlich wieder was total simples:

Option Explixit und das Verwenden einer undeklarierten Variable ( For i = 0 to....) verträgt sich nicht so gut
Aufgrund des "On Error Resume Next" gab es leider auch keine Fehlermeldung.

Jetzt noch eine Sache:
Kann man, ähnlich der Abfrage auf deaktiviert oder nicht, auch noch eine If-Anweisung einfügen, welche prüft, ob das Objekt ein Benutzer oder eine Gruppe ist?
Gruppen sollten nicht mitgezählt werden.


Gruß
Simon
Bitte warten ..
Mitglied: TsukiSan
24.11.2009 um 09:03 Uhr
eventuell mit
01.
If Not USER.AccountDisabled and not user.Name then
Bitte warten ..
Mitglied: DemseinAdmin
24.11.2009 um 10:46 Uhr
Hm ne, das klappt nicht so ganz. Hast du es getestet?
Nicht das es bei mir noch an einem anderen Punkt scheitert.
Bitte warten ..
Mitglied: DemseinAdmin
24.11.2009 um 12:04 Uhr
Ich habe es jetzt so gelöst:

01.
OBJCAT = USER.objectCategory 
02.
BOLGROUP = InStr(1, OBJCAT, "CN=Group", 1) 
03.
'Nur zaehlen, wenn das Objekt keine Gruppe ist 
04.
If (BOLGROUP = "0") Then 
05.
'Nur zaehlen, wenn der Account nicht deaktiviert ist 
06.
   If Not (USER.AccountDisabled) Then 
07.
      ANZ = ANZ + 1 
08.
   End If 
09.
End If
Vielen Dank an alle, für die Hilfe.

Gruß
Simon
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Entwicklung
Zählerstände über SNMP und VBS auslesen (4)

Frage von motofuzy zum Thema Entwicklung ...

VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...