ralfkausk
Goto Top

Mit einer FOR Schleife eine Datei Zeilenweise auslesen und weiterverarbeiten mit dsquery und dsget

Ich habe eine Liste mit Benutzernamen.
In jeder Zeile steht eine Benutzer-ID

Ich möchte mit einer FOR-Schleife diese Datei auslesen und für jeden Eintrag eine AD-Abfrage mit dsquery und dsget machen.
for %%i in (datei.txt) do (
	dsquery user -name %%i|dsget user -dn -samid -sid -upn >> ausgabedatei.txt
	)
exit

Leider klappt das aber nicht.


Ich habe das ganze auch schon mit der Powershell probiert, da allerdings erhalte ich auch einen Fehler!
$a = Get-Content .\datei.txt
foreach ($b in $a){
(dsget user (dsquery user -name $b DC=eu1,DC=xxx,DC=com -dn -samid -sid -upn)) >> ausgabe1.txt
(dsget user (dsquery user -name $b DC=na1,DC=xxx,DC=com -dn -samid -sid -upn)) >> ausgabe1.txt
(dsget user (dsquery user -name $b DC=na2,DC=xxx,DC=com -dn -samid -sid -upn)) >> ausgabe1.txt
Hier tauch folgender Fehler auf:
dsquery.exe : Fehler bei dsquery:"DC=xxx" ist ein unbekannter Parameter.

(DC=xxx ist nur ein Platzhalter)

Wenn ich den Befehl einzeln in der Powershell starte funktioniert er, nur nicht in der Schleife!

Kann mir dabei jemand helfen?

Mir stehen "nur" die Bordmittel (cmd und powershell) und evtl. noch die open source UNIX Tools zur verfügung.
Es ist leider keine Option weitere Software zu installieren.

Danke im voraus

Content-ID: 197431

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

Ausgedruckt am: 05.11.2024 um 12:11 Uhr

bastla
bastla 22.01.2013 um 12:58:45 Uhr
Goto Top
Hallo rkujadt!

Und wenn Du eine "for /f"-Schleife verwendest?

Grüße
bastla
ralfkausk
ralfkausk 22.01.2013 um 13:44:27 Uhr
Goto Top
Hi bastla

Nö, bringt auch nix, leider.
Nur um sicher zu gehen habe ich die Kommandozeile gerade noch mal getestet (ohne variable, mit meiner ID) = funktioniert.
Der Fehler liegt in der Schleife ... aber wo ... ?
andimue
andimue 22.01.2013 aktualisiert um 14:52:18 Uhr
Goto Top
Servus rkujadt,

du schreibst:
Zitat von @ralfkausk:
Leider klappt das aber nicht.

Kannst du etwas genauer beschreiben, was passiert ? Hellsehen ist nicht so unser Ding face-smile

Ich bin auch bastlas Meinung, dass eigentlich nur ein for /f funktioniert.

Und noch eine Frage: deine datei.txt" sieht so aus:
username1
username2
username3

Auf was für einem Betriebssystem bist du denn unterwegs ?

Gruß
Andi
ralfkausk
ralfkausk 22.01.2013 um 14:46:09 Uhr
Goto Top
Sorry, hatte ich ganz vergessen

OS: Windows 7 (64bit) + Virtual Windows XP 32bit
Und ja, meine Datei sieht genau so aus. Ein Benutzername pro Zeile (Insgesamt ~3.000)
[Zum testen natürlich auf 3-4 Einträge reduziert]
andimue
andimue 22.01.2013 um 14:54:21 Uhr
Goto Top
Hi,

ich hab's gerade auf der cmdline ausprobiert:
for /f %i in (datei.txt) do (dsquery user -name %i|dsget user -dn -samid -sid -upn >>t.txt)

Funktioniert prima unter Windows Server 2003 Standard X64

Andi
ralfkausk
ralfkausk 22.01.2013 um 15:24:39 Uhr
Goto Top
na toll ... *grummel*
das ist jetzt nicht was ich hören wollte face-sad

Tja, das bedeutet dann ja wohl das hier was im argen ist ...
Komisch ist, das ich sonst eigentlich alles machen kann und der Befehl alleine auch funktioniert, nur nicht in der FOR-Schleife.

Wenn noch jemand 'ne Idee hätte ...
Ansonsten werde ich das Thema morgen schließen.

Dank an alle für die schnelle Hilfe
andimue
andimue 23.01.2013 um 07:07:27 Uhr
Goto Top
Poste doch einfach mal welche Fehlermeldung du bekommst. Die Aussage "Leider klappt das nicht" ist für eine richtige Hilfe einfach zu schwammig. Aber letztendlich musst du wissen, ob du noch Hilfe brauchst oder nicht.
Viel Erfolg auf jeden Fall
Andi
ralfkausk
ralfkausk 23.01.2013 aktualisiert um 10:01:53 Uhr
Goto Top
Hallo andimue

Es passiert leider nicht viel:
C:\tmp>for /f %i in (datei.txt) do (dsquery user -name %i|dsget user -dn -samid -sid -upn >>t.txt)

C:\tmp>

Die Datei, datei.txt, enthält zum testen 3 Benutzernamen.
In jeder Zeile steht eine ID (ohne Leerzeichen)
user1
user2
user3

Wenn ich den Befehl ohne FOR-Schleife ausführe funktioniert es:
C:\tmp>dsquery user -name user1|dsget user -dn
  dn
  CN=user1,OU=Level0300,OU=GPO,OU=USERIDS,DC=EU1,DC=xxx,DC=com
dsget war erfolgreich
andimue
andimue 23.01.2013 um 10:57:42 Uhr
Goto Top
Servus,

solange du eine Umleitung nach t.txt drin hast wirst du nicht arg viel sehen face-smile
Mach doch mal folgendes :
for /f %i in (datei.txt) do (dsquery user -name %i|dsget user -dn -samid -sid -upn)

und schau mal, was das Kommando bei dir dann ausspuckt

Andi
ralfkausk
ralfkausk 23.01.2013 um 13:14:30 Uhr
Goto Top
hast Recht, das mit der Umleitung war natürlich nicht keine gute Idee face-sad

Aber, trotzdem keine Besserung, absolut gleiches verhalten.
C:\tmp>for /f %i in (datei.txt) do (dsquery user -name %i|dsget user -dn -samid -sid -upn)

C:\tmp>
Biber
Biber 23.01.2013 um 13:56:20 Uhr
Goto Top
Moin rkujadt,

maskiere mal das Pipe-Zeichen ( "|") mit einem Caret (="^"), wenn es sich innerhalb der FOR-Anweisungsklammern befindet.

Also ändere den Ursprungsschnipsel (aus der Frage oben) zum Test in:
for %%i in (datei.txt) do (
	dsquery user -name %%i^|dsget user -dn -samid -sid -upn 
	)
exit

Falls du auch die Umleitung innerhalb der FOR-Anweisungsklammern machen willst, dann solltest du auch statt ">>ausgabedatei.txt" besser "^>^>ausgabedatei.txt" schreiben.

Grüße
Biber
bastla
bastla 23.01.2013 um 13:58:55 Uhr
Goto Top
... und das "/f" beim "for" braucht's auch noch ...

Grüße
bastla
ralfkausk
ralfkausk 24.01.2013 um 08:11:29 Uhr
Goto Top
Moin zusammen

Das hat leider auch nicht geholfen.
So sieht die Ausgabe in einer DOS Konsole aus

C:\tmp>test.cmd

C:\tmp>for /F %i in (datei.txt) do (dsquery user -name %i|dsget user -dn -samid -sid -upn )

C:\tmp>pause
Drücken Sie eine beliebige Taste . . .

Nur um sicher zu gehen habe ich das ganze auch mal auf 'nem anderen Rechner, 'nem anderen OS und zu Hause probiert, es klappt nirgends.

Außerdem habe ich einfach mal versucht den Inhalt der Datei ausgeben zu lassen (direkt aus der DOS Konsole), das kam dabei raus:
C:\tmp>for /F %i in (datei.txt) do (echo %i)

C:\tmp>

Mit "type" sehe ich aber das was in der Datei steht:
C:\tmp>type datei.txt
user1
user2
C:\tmp>
andimue
andimue 24.01.2013 um 11:19:41 Uhr
Goto Top
Hi rkujadt,

ich kann dein Verhalten, dass absolut nichts passiert bei mir reproduzieren, wenn ich eine leere Datei "datei.txt" erzeuge und damit die for-Schleife durchlaufen lasse.
Komisch ist das aber schon, da du ja sagst, in der Datei "datei.txt" ist was drin.

Probier doch mal, den vollständigen Pfad der Datei "datei.txt" anzugeben

Gruß
Andi
ralfkausk
ralfkausk 12.04.2013 um 12:30:31 Uhr
Goto Top
Problem gelöst

Es sieht wohl so aus das die Daten in der Datei nicht ganz korrekt waren, obwohl im Notepad alles korrekt aus sah. Nachdem ich eine neue Datei mit händisch eingetragenen Daten verwendet habe ging's dann.

Vielen dank für eure Unterstützung