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

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

Frage Microsoft Windows Userverwaltung

Mitglied: ralfkausk

ralfkausk (Level 1) - Jetzt verbinden

22.01.2013 um 12:47 Uhr, 2673 Aufrufe, 15 Kommentare

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.
01.
for %%i in (datei.txt) do ( 
02.
	dsquery user -name %%i|dsget user -dn -samid -sid -upn >> ausgabedatei.txt 
03.
04.
exit
Leider klappt das aber nicht.


Ich habe das ganze auch schon mit der Powershell probiert, da allerdings erhalte ich auch einen Fehler!
01.
$a = Get-Content .\datei.txt 
02.
foreach ($b in $a){ 
03.
(dsget user (dsquery user -name $b DC=eu1,DC=xxx,DC=com -dn -samid -sid -upn)) >> ausgabe1.txt 
04.
(dsget user (dsquery user -name $b DC=na1,DC=xxx,DC=com -dn -samid -sid -upn)) >> ausgabe1.txt 
05.
(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
Mitglied: bastla
22.01.2013 um 12:58 Uhr
Hallo rkujadt!

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

Grüße
bastla
Bitte warten ..
Mitglied: ralfkausk
22.01.2013 um 13:44 Uhr
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 ... ?
Bitte warten ..
Mitglied: andimue
22.01.2013, aktualisiert um 14:52 Uhr
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

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

Und noch eine Frage: deine datei.txt" sieht so aus:
01.
username1 
02.
username2 
03.
username3
Auf was für einem Betriebssystem bist du denn unterwegs ?

Gruß
Andi
Bitte warten ..
Mitglied: ralfkausk
22.01.2013 um 14:46 Uhr
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]
Bitte warten ..
Mitglied: andimue
22.01.2013 um 14:54 Uhr
Hi,

ich hab's gerade auf der cmdline ausprobiert:
01.
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
Bitte warten ..
Mitglied: ralfkausk
22.01.2013 um 15:24 Uhr
na toll ... *grummel*
das ist jetzt nicht was ich hören wollte

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
Bitte warten ..
Mitglied: andimue
23.01.2013 um 07:07 Uhr
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
Bitte warten ..
Mitglied: ralfkausk
23.01.2013, aktualisiert um 10:01 Uhr
Hallo andimue

Es passiert leider nicht viel:
01.
C:\tmp>for /f %i in (datei.txt) do (dsquery user -name %i|dsget user -dn -samid -sid -upn >>t.txt) 
02.
 
03.
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:
01.
C:\tmp>dsquery user -name user1|dsget user -dn 
02.
  dn 
03.
  CN=user1,OU=Level0300,OU=GPO,OU=USERIDS,DC=EU1,DC=xxx,DC=com 
04.
dsget war erfolgreich
Bitte warten ..
Mitglied: andimue
23.01.2013 um 10:57 Uhr
Servus,

solange du eine Umleitung nach t.txt drin hast wirst du nicht arg viel sehen
Mach doch mal folgendes :
01.
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
Bitte warten ..
Mitglied: ralfkausk
23.01.2013 um 13:14 Uhr
hast Recht, das mit der Umleitung war natürlich nicht keine gute Idee

Aber, trotzdem keine Besserung, absolut gleiches verhalten.
01.
C:\tmp>for /f %i in (datei.txt) do (dsquery user -name %i|dsget user -dn -samid -sid -upn) 
02.
 
03.
C:\tmp>
Bitte warten ..
Mitglied: Biber
23.01.2013 um 13:56 Uhr
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:
01.
for %%i in (datei.txt) do ( 
02.
	dsquery user -name %%i^|dsget user -dn -samid -sid -upn  
03.
04.
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
Bitte warten ..
Mitglied: bastla
23.01.2013 um 13:58 Uhr
... und das "/f" beim "for" braucht's auch noch ...

Grüße
bastla
Bitte warten ..
Mitglied: ralfkausk
24.01.2013 um 08:11 Uhr
Moin zusammen

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

01.
C:\tmp>test.cmd 
02.
 
03.
C:\tmp>for /F %i in (datei.txt) do (dsquery user -name %i|dsget user -dn -samid -sid -upn ) 
04.
 
05.
C:\tmp>pause 
06.
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:
01.
C:\tmp>for /F %i in (datei.txt) do (echo %i) 
02.
 
03.
C:\tmp>
Mit "type" sehe ich aber das was in der Datei steht:
01.
C:\tmp>type datei.txt 
02.
user1 
03.
user2 
04.
C:\tmp>
Bitte warten ..
Mitglied: andimue
24.01.2013 um 11:19 Uhr
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
Bitte warten ..
Mitglied: ralfkausk
12.04.2013 um 12:30 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Microsoft Office
Internext explorer about:blank auslesen, schleife bis gelanden (1)

Frage von thomas1972 zum Thema Microsoft Office ...

PHP
gelöst Externe XML-Datei in PHP auslesen (18)

Frage von Akrosh zum Thema PHP ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (32)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

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

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...