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-Key: 197431

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

Printed on: April 23, 2024 at 16:04 o'clock

Member: bastla
bastla Jan 22, 2013 at 11:58:45 (UTC)
Goto Top
Hallo rkujadt!

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

Grüße
bastla
Member: ralfkausk
ralfkausk Jan 22, 2013 at 12:44:27 (UTC)
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 ... ?
Member: andimue
andimue Jan 22, 2013 updated at 13:52:18 (UTC)
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
Member: ralfkausk
ralfkausk Jan 22, 2013 at 13:46:09 (UTC)
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]
Member: andimue
andimue Jan 22, 2013 at 13:54:21 (UTC)
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
Member: ralfkausk
ralfkausk Jan 22, 2013 at 14:24:39 (UTC)
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
Member: andimue
andimue Jan 23, 2013 at 06:07:27 (UTC)
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
Member: ralfkausk
ralfkausk Jan 23, 2013 updated at 09:01:53 (UTC)
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
Member: andimue
andimue Jan 23, 2013 at 09:57:42 (UTC)
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
Member: ralfkausk
ralfkausk Jan 23, 2013 at 12:14:30 (UTC)
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>
Member: Biber
Biber Jan 23, 2013 at 12:56:20 (UTC)
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
Member: bastla
bastla Jan 23, 2013 at 12:58:55 (UTC)
Goto Top
... und das "/f" beim "for" braucht's auch noch ...

Grüße
bastla
Member: ralfkausk
ralfkausk Jan 24, 2013 at 07:11:29 (UTC)
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>
Member: andimue
andimue Jan 24, 2013 at 10:19:41 (UTC)
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
Member: ralfkausk
ralfkausk Apr 12, 2013 at 10:30:31 (UTC)
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