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

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

Frage Entwicklung Batch & Shell

Mitglied: narthan

narthan (Level 1) - Jetzt verbinden

23.01.2013 um 14:31 Uhr, 2450 Aufrufe, 11 Kommentare

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:

01.
UserGruppen.txt 
02.
 
03.
Max Mustermann: 
04.
- Verkauf 
05.
- Einkauf 
06.
- Marketing 
07.
 
08.
Fritz Müller: 
09.
- Verkauf 
10.
 
11.
Ulla Meier: 
12.
- Marketing 
13.
- Verkauf 
14.
- 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 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
Mitglied: DerWoWusste
23.01.2013, aktualisiert um 14:38 Uhr
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.
Bitte warten ..
Mitglied: bastla
23.01.2013 um 14:40 Uhr
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
Bitte warten ..
Mitglied: narthan
23.01.2013 um 14:44 Uhr
Hallo,

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


Grüße!
Bitte warten ..
Mitglied: narthan
23.01.2013 um 15:01 Uhr
Hallo,

ich kriegs nicht hin
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:

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

Grüße
Bitte warten ..
Mitglied: bastla
LÖSUNG 23.01.2013, aktualisiert 11.12.2013
Hallo narthan!

Hast Du es denn etwa so versucht (Deinen Ansatz hast Du ja leider nicht gepostet)?
01.
@echo off & setlocal 
02.
set "File=UserGruppen.txt" 
03.
del "%File%" 2>nul 
04.
::User ermitteln und einzeln im Unterprogramm ":ProcessUser" weiterverarbeiten 
05.
for /f "delims=" %%a in ('dsquery user "Pfad,Domäne" -limit 400') do call :ProcessUser %%a 
06.
:: Batch hier beenden 
07.
goto :eof 
08.
 
09.
:ProcessUser 
10.
:: Benutzer steht in %1 
11.
:: Benutzernamen ermitteln (steht nach "CN" und "=" und vor ",") und in Datei schreiben 
12.
for /f "tokens=2 delims==," %%i in (%1) do >>"%File%" echo %%i: 
13.
:: Gruppenmitgliedschaften ermitteln und eintragen 
14.
for /f "tokens=2 delims==," %%i in ('dsget user %1 -memberof') do >>"%File%" echo - %%i 
15.
:: Leerzeile eintragen 
16.
>>"%File%" echo( 
17.
:: Rücksprung in das Hauptprogramm 
18.
goto :eof
Als Variante ohne Unterprogramm:
01.
@echo off & setlocal 
02.
set "File=UserGruppen.txt"  
03.
del "%File%" 2>nul 
04.
for /f "delims=" %%a in ('dsquery user "Pfad,Domäne" -limit 400') do ( 
05.
    REM Benutzer steht in %%a 
06.
    REM Benutzernamen ermitteln und in Datei schreiben 
07.
    for /f "tokens=2 delims==," %%i in (%%a) do >>"%File%" echo %%i: 
08.
    REM Gruppenmitgliedschaften ermitteln und eintragen 
09.
    for /f "tokens=2 delims==," %%i in ('dsget user %%a -memberof') do >>"%File%" echo - %%i 
10.
    REM Leerzeile eintragen 
11.
    >>"%File%" echo( 
12.
)
Grüße
bastla
Bitte warten ..
Mitglied: narthan
24.01.2013 um 07:40 Uhr
Guten Morgen!

Wow! Perfekt bastla, herzlichsten Dank erneut!
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
Bitte warten ..
Mitglied: Penny.Cilin
24.01.2013 um 10:29 Uhr
Zitat von bastla:
Hallo narthan!

Hast Du es denn etwa so versucht (Deinen Ansatz hast Du ja leider nicht gepostet)?
01.
@echo off & setlocal 
02.
> set "File=UserGruppen.txt" 
03.
> del "%File%" 2>nul 
04.
> ::User ermitteln und einzeln im Unterprogramm ":ProcessUser" weiterverarbeiten 
05.
> for /f "delims=" %%a in ('dsquery user "Pfad,Domäne" -limit 400') do call :ProcessUser %%a 
06.
> :: Batch hier beenden 
07.
> goto :eof 
08.
>  
09.
> :ProcessUser 
10.
> :: Benutzer steht in %1 
11.
> :: Benutzernamen ermitteln (steht nach "CN" und "=" und vor ",") und in Datei schreiben 
12.
> for /f "tokens=2 delims==," %%i in (%1) do >>"%File%" echo %%i: 
13.
> :: Gruppenmitgliedschaften ermitteln und eintragen 
14.
> for /f "tokens=2 delims==," %%i in ('dsget user %1 -memberof') do >>"%File%" echo - %%i 
15.
> :: Leerzeile eintragen 
16.
> >>"%File%" echo( 
17.
> :: Rücksprung in das Hauptprogramm 
18.
> goto :eof 
19.
> 
Als Variante ohne Unterprogramm:
01.
@echo off & setlocal 
02.
> set "File=UserGruppen.txt"  
03.
> del "%File%" 2>nul 
04.
> for /f "delims=" %%a in ('dsquery user "Pfad,Domäne" -limit 400') do ( 
05.
>     REM Benutzer steht in %%a 
06.
>     REM Benutzernamen ermitteln und in Datei schreiben 
07.
>     for /f "tokens=2 delims==," %%i in (%%a) do >>"%File%" echo %%i: 
08.
>     REM Gruppenmitgliedschaften ermitteln und eintragen 
09.
>     for /f "tokens=2 delims==," %%i in ('dsget user %%a -memberof') do >>"%File%" echo - %%i 
10.
>     REM Leerzeile eintragen 
11.
>     >>"%File%" echo( 
12.
> ) 
13.
> 
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.
Bitte warten ..
Mitglied: bastla
24.01.2013 um 12:34 Uhr
@ 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
Bitte warten ..
Mitglied: bastla
24.01.2013 um 12:41 Uhr
Hallo narthan!

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

Grüße
bastla
Bitte warten ..
Mitglied: Penny.Cilin
24.01.2013 um 12:46 Uhr
@bastla

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


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

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
Batch & Shell
gelöst User und AD Gruppe finden - wie das Pferd aufzäumen (5)

Frage von H41mSh1C0R zum Thema Batch & Shell ...

Windows Server
gelöst AD-User einer AD-Gruppe auslesen und in ein File schreiben (15)

Frage von Estefania zum Thema Windows Server ...

Batch & Shell
gelöst AD-Felder für User mittels Powershell befüllen aus CSV-Datei (2)

Frage von Alex94G zum Thema Batch & Shell ...

Batch & Shell
Per Batch aktuell angemeldete User auslesen (1)

Frage von Peter32 zum Thema Batch & Shell ...

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 ...