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

Problem bei Batch Code (betreffend AD)

Frage Entwicklung Batch & Shell

Mitglied: narthan

narthan (Level 1) - Jetzt verbinden

21.01.2013, aktualisiert 12:02 Uhr, 3416 Aufrufe, 13 Kommentare

Hallo,

ich habe folgendes Problem. Ich soll mit einer Batch Datei aus dem AD die Owner einer Gruppe (sind in der Beschreibung aufgelistet), alle Gruppen die dem Owner gehören und sämtliche Mitglieder dieser Gruppen in Owner-abhängige .txt Dateien auslesen und speichern. Ich bin nun soweit, dass ich die Owner auslesen und in Dateien speichern kann, allerdings erstellt er pro gefundenen Owner eine neue .txt Datei.
Das Problem ist dabei, wenn ich nun 3 Gruppen mit dem gleichen Owner (z.B. Owner: Müller) habe, dann erstellt er mir auch 3 .txt Dateien... Ich möchte aber eine .txt für jeden Owner, in dieser .txt Datei sollten dann alle Gruppen mit Membern aufgelistet werden.


Mein Code sieht wie folgt aus:

01.
@ECHO OFF & setlocal enabledelayedexpansion 
02.
 
03.
dsquery group "Pfad,Domain" -limit 400 | dsget group -desc > DescriptionList.txt 
04.
 
05.
 
06.
SET /a num=0 
07.
 
08.
FOR /F "delims=" %%a IN (DescriptionList.txt) DO CALL :ausgabe "%%a" 
09.
ECHO. 
10.
ECHO Anzeige der erzeugten Variablen: 
11.
SET v 
12.
PAUSE 
13.
GOTO :eof 
14.
 
15.
:ausgabe 
16.
SET /a num=%num%+1 
17.
ECHO Textzeile ist %1 
18.
ECHO Zeilennummer=%num% 
19.
SET var%num%=%1 
20.
ECHO Variableninhalt=!var%num%! 
21.
 
22.
ECHO !var%num%! | findstr "Owner">NUL 
23.
IF not errorlevel 1  ECHO !var%num%! > Owner_var%num%.txt

Über Hilfe wäre ich sehr dankbar (Powershell, VBS, etc. kommen nicht in Frage, nur Batch (DOS, Win2k3 Server).

Gruß
Mitglied: bastla
21.01.2013 um 11:47 Uhr
Hallo narthan!

Ändere versuchsweise die letzte Zeile auf
IF not errorlevel 1 ECHO !var%num%! >>Owner_var%num%.txt
BTW: Wozu speicherst Du alle Zeilen in einzelnen Variablen?

Grüße
bastla

P.S.: "Code"-Formatierung lässt sich auch nachträglich noch anwenden ...
Bitte warten ..
Mitglied: narthan
21.01.2013 um 12:06 Uhr
Hey danke für die Antwort!

Ich musste die "Descriptions" in eine Datei speichern, um diese dann jedoch weiterzuverwenden, musste ich die Datei zeilenweise auslesen und in Variablen speichern, um auch nur die Werte, in denen "Owner" enthalten ist, in eine neue Datei zu speichern. (Bin übrigens ein totaler Batch-Neuling, sieht man vllt ja :D )


Die Änderung der Zeile hatte nicht den gewünschten Effekt, da dieselbe Ausgabe einfach nur innerhalb der Datei angehängt wurde. :/

Gruß
Bitte warten ..
Mitglied: bastla
21.01.2013, aktualisiert um 16:53 Uhr
Hallo narthan!

Wie sieht denn (schematisch) eine solche Zeile mit "Owner" aus?
Ich musste die "Descriptions" in eine Datei speichern
Hast Du schon mal
FOR /F "delims=" %%a IN ('dsquery group "Pfad,Domain" -limit 400 ^| dsget group -desc ^| findstr "Owner"') DO echo "%%a"
versucht?

Grüße
bastla

[Edit] schließenden Apostroph ergänzt [/Edit]
Bitte warten ..
Mitglied: narthan
21.01.2013 um 12:52 Uhr
Hey,

nein noch nicht, danke, probier ich gleich mal und melde mich dann wieder (muss nur kurz was in der Stadt besorgen).

Die Zeilen sehen sehr simpel aus: "Owner: Max Mustermann"
Mehr steht in einer solchen Zeile nicht drin.

Gruß
Bitte warten ..
Mitglied: narthan
21.01.2013 um 14:20 Uhr
Hi, da bin ich wieder.

FOR /F "delims=" %%a IN ('dsquery group "Pfad,Domain" -limit 400 ^| dsget group -desc ^| findstr "Owner" ) DO echo "%%a" 


..führt leider zu einem Fehler, passiert auch nichts mit den Dateien. :/

Grüße
Bitte warten ..
Mitglied: bastla
21.01.2013, aktualisiert um 16:54 Uhr
Hallo narthan!
..führt leider zu einem Fehler
Hab's schon gesehen - der schließende Apostroph hat gefehlt (ist jetzt oben nachgetragen).
passiert auch nichts mit den Dateien. :/
Soll es ja ohnehin nicht - da steht ja nur ein simples
echo "%%a"
damit Du Dir einmal die Ausgabe ansehen kannst.

Was Du dann damit vorhast, leuchtet mir noch nicht so ganz ein, denn Dein ursprünglicher Ansatz würde ja nach Deiner Beschreibung versuchen, Dateien wie "Owner_Owner: Max Mustermann.txt" mit dem Inhalt "Owner: Max Mustermann" zu erzeugen - sieht nicht sehr informativ aus ...

Vielleicht holst Du noch etwas weiter aus und postest die ersten paar Zeilen (für zB 3 Gruppen) Deiner "DescriptionList.txt" und das gewünschte Resultat.

Grüße
bastla
Bitte warten ..
Mitglied: narthan
22.01.2013 um 08:11 Uhr
Moin,

alles klar, probier ich aus

Also meine DescriptionList.txt sieht wie folgt aus:
01.
Owner: Max Mustermann 
02.
Owner: Peter Meier 
03.
Owner: Karsten Müller 
04.
Owner: Max Mustermann 
05.
Owner: Ulla Schulz 
06.
Owner: Ulla Schulz 
07.
usw...
und nun müsste ich ne .txt erstellen (zu einem dieser Owner, z.B. Max Mustermann), die wie folgt gegliedert sein sollte:

01.
MaxMustermann.txt 
02.
 
03.
Owner: Max Mustermann 
04.
Gruppe ABC: 
05.
- Ulla Schulz 
06.
- Karsten Müller 
07.
- Peter Meier 
08.
 
09.
Gruppe DCE: 
10.
- Ulla Schulz 
11.
- Peter Meier 
Max Mustermann wäre in diesem Fall der Owner der Gruppen ABC und DCE, darunter sind die dazugehörigen Gruppenmitglieder aufgelistet.

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

Dann wäre das eher so zu lösen (weitgehend ungetestet):
01.
@echo off & setlocal 
02.
::Gruppen ermitteln und einzeln im Unterprogramm ":ProcessGroup" weiterverarbeiten 
03.
for /f "delims=" %%a in ('dsquery group "Pfad,Domain" -limit 400') do call :ProcessGroup "%%a" 
04.
:: Batch hier beenden 
05.
goto :eof 
06.
 
07.
:ProcessGroup 
08.
:: Gruppe steht in %1 
09.
:: Owner auslesen (steht nach erstem ":" und " " und kann Leerzeichen enthalten) 
10.
for /f "tokens=1* delims=: " %%i in ('dsget group %1 -desc ^| findstr "Owner"') do set "Owner=%%j" 
11.
:: Dateinamen (ohne Leerzeichen + ".txt") erstellen 
12.
set "File=%Owner: =%.txt" 
13.
:: Gruppennamen ermitteln (steht nach "CN" und "=" und vor ",") 
14.
for /f "tokens=2 delims==," %%i in (%1) do set "Group=%%i" 
15.
:: Gruppeninfo in Datei schreiben 
16.
setlocal enabledelayedexpansion 
17.
:: Owner nur beim Erstellen der Datei eintragen 
18.
if not exist "%File%" >>"%File%" echo Owner: %Owner% 
19.
>>"%File%" echo Gruppe %Group%: 
20.
endlocal 
21.
:: Gruppenmitglieder ermitteln und eintragen 
22.
for /f "tokens=2 delims==," %%i in ('dsget group %1 -members') do >>"%File%"  echo - %%i 
23.
:: Leerzeile eintragen 
24.
>>"%File%" echo( 
25.
:: Rücksprung in das Hauptprogramm 
26.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: narthan
22.01.2013 um 12:45 Uhr
Hey bastla!

Danke für den Quellcode, allerdings füllt der die Datei nicht so aus wie erhofft.
Er erstellt eine Datei die folgenden Inhalt hat:

01.
Owner:  
02.
Gruppe : 
03.
 
04.
Gruppe : 
05.
 
06.
Gruppe : 
07.
 
08.
Gruppe : 
09.
 
10.
Gruppe : 
11.
 
12.
Gruppe : 
13.
 
14.
Gruppe : 
15.
 
16.
Gruppe : 
Allerdings ohne Werte.
Während die Batch ausgeführt wird, kommt auch bei jeder Zeile die gleiche Fehlermeldung, allerdings konnte ich nicht richtig sehen welche, weil das so schnell durchgelaufen ist (glaube etwas mit dsget und Zielobjekt).

Grüße
Bitte warten ..
Mitglied: bastla
22.01.2013 um 13:03 Uhr
Hallo narthan!

Einen Batch solltest Du auch nicht per Doppelklick, sondern aus einer CMD-Shell starten (oder zumindest eine Zeile
pause
unmitelbar vor dem Ende - also hier vor Zeile 5 - verwenden) ...
Schau Dir vor allem an, ob Dein Eintrag für "Pfad,Domain" richtig ist.

Grüße
bastla
Bitte warten ..
Mitglied: narthan
22.01.2013 um 13:11 Uhr
Hallo!

Zitat von bastla:
Hallo narthan!

Einen Batch solltest Du auch nicht per Doppelklick, sondern aus einer CMD-Shell starten (oder zumindest eine Zeile
pause 
> 
unmitelbar vor dem Ende - also hier vor Zeile 5 - verwenden) ...

Ok hab ich gemacht, dann kommt folgende Fehlermeldung:

01.
Geben Sie "dsget /?" ein, um die Hilfe anzuzeigen.Die Datei ""CN" kann nicht gefunden werden. 
02.
Fehler bei dsget:Der Wert für "Zielobjekt für diesen Befehl" hat ein falsches Format. 
03.
Geben Sie "dsget /?" ein, um die Hilfe anzuzeigen.Fehler bei dsget:Der Wert für "Zielobjekt für diesen Befehl" 
04.
 hat ein falsches Format.
Diese tritt wiederholt für jede Zeile auf.


Schau Dir vor allem an, ob Dein Eintrag für "Pfad,Domain" richtig ist.

Hab ich nochmal überprüft, aber der Pfad ist definitiv korrekt. :/

Gruß zurück!
Bitte warten ..
Mitglied: bastla
LÖSUNG 22.01.2013, aktualisiert 25.04.2014
Hallo narthan!

Da ja der von "dsquery" gelieferte LDAP-Pfad bereits unter Anführungszeichen steht, sind die in der Zeile 3 zusätzlich Gesetzten leider etwas viel des Guten - versuch es mit ohne:
for /f "delims=" %%a in ('dsquery group "Pfad,Domain" -limit 400') do call :ProcessGroup %%a
Zur Sicherheit solltest Du noch Zeile 10 durch
01.
set "Owner=" 
02.
for /f "tokens=1* delims=: " %%i in ('dsget group %1 -desc ^| findstr "Owner"') do set "Owner=%%j" 
03.
if not defined Owner echo %1 - kein Owner & goto :eof
ersetzen.
... und wie gesagt: Batches testest Du am besten direkt aus einer CMD-Shell (und wenn's wo klemmt, mit "echo on" anstatt "echo off"); wenn Du dann noch vorweg in den Eigenschaften des CMD-Fensters (Register "Layout") die Höhe der "Fensterpuffergröße" auf den Maximalwert von 9999 gesetzt hast, kannst Du in aller Ruhe nach oben scrollen und Dir sowohl Befehle als auch Ausgaben der einzelnen Batch-Zeilen ansehen ...

Grüße
bastla
Bitte warten ..
Mitglied: narthan
23.01.2013, aktualisiert um 08:40 Uhr
Guten Morgen bastla!

Zitat von bastla:
Hallo narthan!

Da ja der von "dsquery" gelieferte LDAP-Pfad bereits unter Anführungszeichen steht, sind die in der Zeile 3
zusätzlich Gesetzten leider etwas viel des Guten - versuch es mit ohne:
for /f "delims=" %%a in ('dsquery group "Pfad,Domain" -limit 
> 400') do call :ProcessGroup %%a 
> 


Herzlichsten Dank, du warst mir eine sehr große Hilfe und es funktioniert tadellos.

Achja, die Zeile 10 musste ich auch durch deinen Code noch ersetzen, sonst waren noch dutzend andere Gruppen in den .txt Dateien, die gar nichts mit dem Owner zu tun hatten.

Bis zum nächsten Mal,
Grüße
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Ähnliche Inhalte
Batch & Shell
gelöst Grosses Variablen Problem ( Batch) (30)

Frage von clragon zum Thema Batch & Shell ...

Microsoft
AD Problem und VPN (4)

Frage von Yannosch zum Thema Microsoft ...

Batch & Shell
gelöst Batch Problem bei einer For Schleife (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (17)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...