narthan
Goto Top

Alle User und deren Gruppen in denen sie Mitglied sind (Batch AD)

Guten Tag,

ich muss ein BATCH Skript erstellen, das bewirkt, dass nach ausführen dieses Skripts eine .txt Datei erstellt wurde, in der alle User des Active Directories und deren Gruppen (also in denen die User Mitglied sind) verzeichnet sind. Als Beispiel dachte ich mir könnte dies so aussehen als Endresultat:

UserGruppen.txt

Max Mustermann:
- Verkauf
- Einkauf
- Marketing

Fritz Müller:
- Verkauf

Ulla Meier:
- Marketing
- Verkauf
- Personalblabla


Falls dies nicht möglich innerhalb einer Datei ist, wär eine .txt Datei pro User auch okay. Und notwendig ist, dass man als Gruppen wirklich nur den Gruppennamen, also OHNE Pfad und Domäne sieht.

Ich habs mir sehr umständlich gemacht und pro User einen dsget Befehl angelegt, aber auch nicht geschafft dass man nur den Gruppennamen sieht face-sad zudem ist diese Variante extrem arbeitsaufwendig, müsste doch mit einer for-Schleife einfacher sein, oder?

(bin ein totaler Batch-Neuling, aber ich muss es mit Batch machen)

Grüße,
narthan

Content-ID: 197507

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

Ausgedruckt am: 25.11.2024 um 07:11 Uhr

DerWoWusste
DerWoWusste 23.01.2013 aktualisiert um 14:38:27 Uhr
Goto Top
Moin.
Schau Dir mal den Befehl net user an. Diese auf dem DC ausführen und das Resultat mit findstr auf die gewünschte Zeile mit der Gruppenmitgliedschaft verkürzen. Eine Userliste für die For-Schleife zu erstellen, macht auch net user für Dich.
bastla
bastla 23.01.2013 um 14:40:51 Uhr
Goto Top
Hallo narthan!

Ist doch das selbe Strickmuster (auch hinsichtlich des Herausfilterns nur des Gruppennamens) wie hier (eben mit "dsget user %1 -memberof") ...

Grüße
bastla
narthan
narthan 23.01.2013 um 14:44:04 Uhr
Goto Top
Hallo,

das ging ja fix! Danke euch beiden, ich probier gleich mal beides aus face-smile


Grüße!
narthan
narthan 23.01.2013 um 15:01:38 Uhr
Goto Top
Hallo,

ich kriegs nicht hin face-sad
Ich habe im bestehenden Quellcode aus meinem anderen Problem den dsquery Befehl geändert, sodass ich nach den Usern suche (dsquery user "pfad,domäne" ...). Außerdem den dsget Befehl von -desc auf -memberof, aber dann kommt folgende Fehlermeldung bei jeder Zeile:

Geben Sie "dsget /?" ein, um die Hilfe anzuzeigen.dsget Fehler:CN,OU,DC:Die Objektklasse des Ziels stimmt nicht mit der in der Befehlszei  
le angegebenen Klasse überein.
Geben Sie "dsget /?" ein, um die Hilfe anzuzeigen.Drücken Sie eine beliebige Taste . . .  

face-sad
Grüße
bastla
Lösung bastla 23.01.2013, aktualisiert am 11.12.2013 um 14:08:02 Uhr
Goto Top
Hallo narthan!

Hast Du es denn etwa so versucht (Deinen Ansatz hast Du ja leider nicht gepostet)?
@echo off & setlocal
set "File=UserGruppen.txt"  
del "%File%" 2>nul  
::User ermitteln und einzeln im Unterprogramm ":ProcessUser" weiterverarbeiten 
for /f "delims=" %%a in ('dsquery user "Pfad,Domäne" -limit 400') do call :ProcessUser %%a  
:: Batch hier beenden
goto :eof

:ProcessUser
:: Benutzer steht in %1
:: Benutzernamen ermitteln (steht nach "CN" und "=" und vor ",") und in Datei schreiben 
for /f "tokens=2 delims==," %%i in (%1) do >>"%File%" echo %%i:  
:: Gruppenmitgliedschaften ermitteln und eintragen
for /f "tokens=2 delims==," %%i in ('dsget user %1 -memberof') do >>"%File%" echo - %%i  
:: Leerzeile eintragen
>>"%File%" echo(  
:: Rücksprung in das Hauptprogramm
goto :eof
Als Variante ohne Unterprogramm:
@echo off & setlocal
set "File=UserGruppen.txt"   
del "%File%" 2>nul  
for /f "delims=" %%a in ('dsquery user "Pfad,Domäne" -limit 400') do (  
    REM Benutzer steht in %%a
    REM Benutzernamen ermitteln und in Datei schreiben
    for /f "tokens=2 delims==," %%i in (%%a) do >>"%File%" echo %%i:  
    REM Gruppenmitgliedschaften ermitteln und eintragen
    for /f "tokens=2 delims==," %%i in ('dsget user %%a -memberof') do >>"%File%" echo - %%i  
    REM Leerzeile eintragen
    >>"%File%" echo(  
)
Grüße
bastla
narthan
narthan 24.01.2013 um 07:40:56 Uhr
Goto Top
Guten Morgen!

Wow! Perfekt bastla, herzlichsten Dank erneut! face-smile
Ich hatte den Ansatz richtig (Variante mit Unterprogramm), allerdings noch deutlich mehr innerhalb des Unterprogramms was dann wohl etwas kaputt gemacht hat.

Danke nochmal, Grüße face-smile
Penny.Cilin
Penny.Cilin 24.01.2013 um 10:29:21 Uhr
Goto Top
Zitat von @bastla:
Hallo narthan!

Hast Du es denn etwa so versucht (Deinen Ansatz hast Du ja leider nicht gepostet)?
@echo off & setlocal
> set "File=UserGruppen.txt"  
> del "%File%" 2>nul  
> ::User ermitteln und einzeln im Unterprogramm ":ProcessUser" weiterverarbeiten  
> for /f "delims=" %%a in ('dsquery user "Pfad,Domäne" -limit 400') do call :ProcessUser %%a  
> :: Batch hier beenden
> goto :eof
> 
> :ProcessUser
> :: Benutzer steht in %1
> :: Benutzernamen ermitteln (steht nach "CN" und "=" und vor ",") und in Datei schreiben  
> for /f "tokens=2 delims==," %%i in (%1) do >>"%File%" echo %%i:  
> :: Gruppenmitgliedschaften ermitteln und eintragen
> for /f "tokens=2 delims==," %%i in ('dsget user %1 -memberof') do >>"%File%" echo - %%i  
> :: Leerzeile eintragen
> >>"%File%" echo(  
> :: Rücksprung in das Hauptprogramm
> goto :eof
> 
Als Variante ohne Unterprogramm:
@echo off & setlocal
> set "File=UserGruppen.txt"   
> del "%File%" 2>nul  
> for /f "delims=" %%a in ('dsquery user "Pfad,Domäne" -limit 400') do (  
>     REM Benutzer steht in %%a
>     REM Benutzernamen ermitteln und in Datei schreiben
>     for /f "tokens=2 delims==," %%i in (%%a) do >>"%File%" echo %%i:  
>     REM Gruppenmitgliedschaften ermitteln und eintragen
>     for /f "tokens=2 delims==," %%i in ('dsget user %%a -memberof') do >>"%File%" echo - %%i  
>     REM Leerzeile eintragen
>     >>"%File%" echo(  
> )
> 
Grüße
bastla

@bastla:
Hast Du evtl. bei der Variante mit Unterprogramm nicht evtl. eine Klammer vergessen?
Weil in Zeile 16 wird die Klammer geöffnet und nirgendwo geschlossen.
:fragend:


Gruss Penny.
bastla
bastla 24.01.2013 um 12:34:53 Uhr
Goto Top
@ Penny
Hast Du evtl. bei der Variante mit Unterprogramm nicht evtl. eine Klammer vergessen?
Hab ich nicht - diese Klammer bewirkt (wie auch ein Punkt oder etwa ein Backslash) die Ausgabe einer Leerzeile und wurde von jeb-the-batcher empfohlen ...

Grüße
bastla
bastla
bastla 24.01.2013 um 12:41:09 Uhr
Goto Top
Hallo narthan!

Du solltest Dir das Tutorial zur FOR-Schleife von Friemler einmal ansehen ...

Grüße
bastla
Penny.Cilin
Penny.Cilin 24.01.2013 um 12:46:04 Uhr
Goto Top
@bastla

wusste ich jetzt nicht. Naja mit Batches bin ich nicht mehr so fit. Danke für die Aufklärung.


Gruss Penny.
bastla
bastla 24.01.2013 um 12:48:30 Uhr
Goto Top
@ Penny
War mir vorher auch nicht bekannt, habe ich aber zwischenzeitlich mit Erfolg verwendet und bin daher zu dieser Schreibweise übergegangen ...

Grüße
bastla