koluschkib
Goto Top

tool zum auselsen der user anzahl der gruppen in AD

ahoi

hab wieder ein problem, wo ich die lösung nicht wirklich finde. das problem ist, dass ich einen batch skript schreiben soll womit die anzahl der user in allen gruppen im AD ausgelesen werden sollen

nun zur genau beschreiben...
ich soll eine batch skript erstellen, dass wenn ich es starte alle gruppen quasi gescannt werden. der scann soll am ende mir sagen wieviele user in denn jeweiligen angelegten gruppen da sind.
hab schon hier bei admin.de hilfreiche tipps gefunden, die mich meiner lösung näher gebracht haben, aber das gewünschte ergebniss, war leider nicht dabei

hab folgende befehle schon erstellt, die auch soweit ganz funktionier

@ echo off


dsget group cn="gruppenname",cn=users,dc=finaleweisheit,dc=de -members -expand >>c:\habla.txt  



pause

die user werden problemlos ausgelesen und ich kann in der angelegten .txt datei die namen einsehen... seo weit so gut


ein anderer versuch von mir:

@echo off

dsquery group -name GRUPPENNAME |dsget group -members >c:\test.txt

pause

bei diesem befehl habe ich aber weniger erfolg gehabt und man kann immer nur eine gruppe auslesen, wenn ich das richtig sehe.


meine aufageb ist es aber ein skript zu erstellen, womit man die ANZAHL der user in allen angelegten gruppen herausfindet und das ganze in einer txt datei dokumentiert

wenn man "X" user in einer gruppe hat, macht es keinen sinn sie einzelen zu zählen.

hab bereits das tool José gefunden, was aus sehr hilfreich ist. aber es entspricht leider nicht der vorstellen meines aufgaben gegebers.


gibt es ein tool, was man vorweg in ein skript einbauen kann (wie zb rmtshare oder sowas in der art) der mir die user und die anzahl der user ausliest und dokumentiert?

für eure hilfe wäre ich sehr dankbar


gruß

koluschkiB

Content-Key: 116911

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

Printed on: April 24, 2024 at 17:04 o'clock

Member: xm-bit
xm-bit May 27, 2009 at 10:06:39 (UTC)
Goto Top
Hi,

da kann ich immer wieder nur folgendes empehlen:

http://www.wintotal.de/Software/index.php?id=2554

Das beste Dokumentationswerkzeug fürs AD.

mfg

Sascha
Member: koluschkiB
koluschkiB May 27, 2009 at 10:31:59 (UTC)
Goto Top
hey SasH

wie du aus meinem endlos text entnehemen kannst, hab ich diese programm bereits selbst gefunden und getestet.
ich soll aber ein skript schreiben, somit bringt es mir nichts eine software zu nutze die damit absolut nichts zu tun hat

trotzdem danke für deine hilfe

gruße
Member: koluschkiB
koluschkiB May 27, 2009 at 10:34:55 (UTC)
Goto Top
hey nochmal

hab auf deinen link geklickt und konnte unten lesen das dieses tool skriptgesteutert verwendet werden kann

kann es per .bat skirpt gesteuert werden? weist du was darüber
Member: koluschkiB
koluschkiB May 27, 2009 at 10:41:23 (UTC)
Goto Top
nachtrag

die frage mit dem skript hat sich erleidgt, JOSE ist nicht zu gebrauchen, da ich die namen kriege und nicht die anzahl der user

(jetzt weit her geholt)
wenn man in einer gruppe 1000user hat, wer soll die zählen?!

gruß
Member: bastla
bastla May 27, 2009 at 12:32:01 (UTC)
Goto Top
Hallo koluschkiB!

Wenn Du schon eine Datei mit allen Usern hast, sollte es doch genügen, die Zeilen mit Usereinträgen (sollten ja alle ein "=" beinhalten) in dieser Datei zu zählen, etwa:
for /f "delims=:" %%i in ('findstr /n "=" "c:\habla.txt"') do set "Anzahl=%%i"  
if defined Anzahl (
    echo %Anzahl% User in der Gruppe (Datei)
) else (
    echo Keine User enthalten!
)
Grüße
bastla

[Edit] Nachtrag falsch gelesen ... [/Edit]
Member: holzholer
holzholer May 27, 2009 at 12:41:17 (UTC)
Goto Top
bastla war schneller

Hallo,
ich hätte es ungefähr so gelöst:

[Edit2] fehlerhaften code gelöscht[/Edit2]

Das zählt dir aber nur die Anzahl der Zeilen in der "x.tmp".

Grüßle

Edit: einfacherer code

[Edit2] fehlerhaften code gelöscht. nimmt den von bastla. [/Edit2]
Member: bastla
bastla May 27, 2009 at 12:50:41 (UTC)
Goto Top
@holzholer
Das zählt dir aber nur die Anzahl der Zeilen in der "x.tmp".
Leider nicht mal das (Stichwort "delayedExpansion") [Edit] Antwort auf einen vormals anders lautenden Kommentar ... [/Edit]; so würde es klappen:
set /A line=0
For /F "delims=" %%i in (x.tmp) do set /a line+=1  
echo %line%
[Edit2] Dein "einfacherer" Code würde nur den Inhalt der letzten Zeile liefern. [/Edit2]

Grüße
bastla
Member: holzholer
holzholer May 27, 2009 at 12:54:43 (UTC)
Goto Top
Danke, ich habs zwischenzeitlich auch gemerkt und daher (anders) gelöst.

Danke bastla und Grüße,
holzholer
Member: koluschkiB
koluschkiB May 27, 2009 at 13:54:44 (UTC)
Goto Top
hey wir, also der kolegge und ich haben schon einwenig rumgebastelt. mit der selben idee wie du sie hattest, also mit dem zählen der zeilen usw.

so sieht es zur zeit aus

@echo off

 

if not exist c:\Gruppen\nul (

            md c:\Gruppen\

            )

 

::Alle Gruppen der Domäne auslesen und temporär in einer Logdatei speichern.

dsquery group cn=users,dc=azubi,dc=int >>c:\groups.log

 

for /f "delims=, tokens=1" %%a in (c:\groups.log) do call :groups %%a  

            goto ende

            

:groups 

 

            ::Vorbereitende Variable für die Gruppennamen setzen

            set pregroup=%1 

            

            ::Bestimmen der Gruppennamen

            set group=%pregroup:~4,-1%

            

            ::Ausgabe der Gruppennamen

            echo %group% >>c:\gruppen\"%group%".log  

            echo ----------------------------- >>c:\gruppen\"%group%".log  

            

            ::Ausführen des dsget-Befehls mit allen Gruppennamen

            dsget group CN="%group%",CN=Users,DC=azubi,DC=int -members 2>>nul >>c:\members.log  

                        

                        for /f "delims=, tokens=1" %%a in (c:\members.log) do call :members %%a  

                                   goto ende

                        

                                   :members

                                               

                                               ::Vorbereitende Variable für die Mitglieder der Gruppe

                                               set premember=%1

                                               

                                               ::Bestimmen der Mitglieder der Gruppe

                                               set member=%premember:~4%

                                               

                                               ::Ausgabe der Mitglieder

                                               echo %member% >>c:\gruppen\"%group%".log  

 

goto :eof

 

:ende

 

::Counter auf 0 setzen

Set /a "Counter=0"  

 

::Schleife zum zählen der Zeilen in den .log-Dateien

for /f "delims= skip=3" %%a in (c:\gruppen\%group%.log) do set /a "counter+=1"  

                                               

            echo Anzahl der Mitglieder: %counter% >>c:\gruppen\"%group%".log  

 

del c:\groups.log 2>>nul

del c:\members.log 2>>nul

leider ist hier das problem, dass er nur die zeilen der logfiles ausliest, welche einen zusammenhängenden namen haben. dateien wie bsp. "dhcp admins" werden nicht richtig behandelt.
Member: Vargsvart
Vargsvart May 27, 2009 at 13:59:10 (UTC)
Goto Top
Hier spricht der Kollege.

Eine kleine Anmerkung noch:

for /f "delims= skip=3" %%a in ("c:\gruppen\%group%.log") do set /a "counter+=1"  

oder

for /f "delims= skip=3" %%a in (c:\gruppen\%"group%".log) do set /a "counter+=1"  

nützen nichts.
Member: holzholer
holzholer May 27, 2009 at 14:13:11 (UTC)
Goto Top
Hallo,

Wie bastla vorhin schon erwähnt hatte fehlt das "enable delayed expansion" damit er einen counter innerhalb einer Schleife hochzählen kann.

Grüße
Member: Vargsvart
Vargsvart May 27, 2009 at 14:25:29 (UTC)
Goto Top
Hallo,

das Skript zählt, so wie es ist in allen Dateien, die einen zusammenhängenden Namen haben (z.B. DnsAdmins.log) hoch. Befinden sich in so einer Datei 3 User, so ist auch das Ergebnis korrekt -> 3.

Allerdings kann er Dateien, welche einen nicht zusammenhängenden Namen tragen (z.B. DHCP Administrators.log) nicht richtig verarbeiten und gibt somit immer 0 als Ergebnis aus. (Ist ja klar, er kann sie nicht lesen und somit bleibt der Counter auf 0).

Aber was muss getan werden, dass in der Zeile 99 des oben geposteten Skripts auch die Berechnung funktioniert, wenn die Variable %group% gerade den Wert "DHCP Administrators" besitzt?

Gruß

Varg
Member: bastla
bastla May 27, 2009 at 14:56:43 (UTC)
Goto Top
Hallo Vargsvart!

In Zeile 99 wird der Pfad zur Gruppen-Logdatei ohne Anführungszeichen verwendet - besser:
for /f "usebackq skip=3 delims=" %%a in ("c:\gruppen\%group%.log") do set /a "counter+=1"

Was mir sonst so beim Drüberschauen auffiele ([Edit] aber nach genauerer Betrachtung - hatte ein weiteres "goto Ende" übersehen - so nicht zutrifft ... [/Edit]:

Die Zeilen 91 bis 103 sollten noch vor Zeile 83 platziert werden, da ja die Mitgliederanzahl für jede Gruppe einzeln ermittelt werden soll (bzw, falls nicht, enthält die Variable %group% beim Sprung in den Programmteil :Ende den letzten Gruppennamen).

Damit diese Anzahl auch wirklich stimmt, muss die Temporärdatei "C:\members.log" für jede Gruppe neu geschrieben werden, daher wäre in Zeile 51 nur >c:\members.log anstelle von >>c:\members.log zu verwenden.

Grüße
bastla
Member: Vargsvart
Vargsvart May 27, 2009 at 15:06:25 (UTC)
Goto Top
Moin bastla,

das Setzen von "" führt leider, wie ich auch bereits geschrieben habe, zu keinem Erfolg. Eher im Gegenteil. Es wird so in garkeiner Datei mehr einer Berechnung der Zeilen vorgenommen.

Was das verschieben der Zeilen angeht:

Setze ich die Zeilen 91 bis 103 vor die Zeile 83, so schreibt das Skript mir nach jedem eingetragenen User die Ausgabe der Anzahl.

in etwa so:

Test
User1
Anzahl der User: 1
User2
Anzahl der User 3
User3
Anzahl der User 5
.
.
.
Member: Vargsvart
Vargsvart May 27, 2009 at 15:27:43 (UTC)
Goto Top
Ich habe soeben einen Workarround gefunden, der das Problem beseitigt.

Und zwar hat mir mein nettes Büchlein verraten, dass es folgendermaßen funktioniert:

for /f "delims= skip=2" %%a in ('type "c:\gruppen\%group%_%date%.log"') do set /a "counter+=1"  

Ich danke allen, die sich die Mühe gemacht haben uns bei der Fehlersuche zu helfen.

Gruß

Varg