weini79
Goto Top

Active Directory Export Textdatei suchen ersetzen und bestimmte Stellen überspringen

Hi leute - ich hoffe mir kann jemand helfen ich habe folgende Anforderung:

Ich möchte bestimmte AD Einträge in einer SQL 2005 Datenbank integrieren, weil ich diese dort für eine Auswertung bzw. Viewvernetzung einer anderen Tabelle benötige.

Folgendes hab ich schon gemacht - per geplanten task am DB Server:

csvde -f export.txt -l givenName, displayName,givenName,mail,sAMAccountName -d "OU=Users, OU=AT, dc=testdomain, dc=vienna" -r objectClass=user

findstr /V /C:"givenName" export.txt > exportNoHeader.txt

--> das funktioniert soweit perfekt die Ausgabe von exportNoHeader sieht so aus:

"CN=Kobrlova Iveta,OU=CZ,OU=Users,OU=AT,DC=testdomain,DC=vienna",Iveta,Kobrlova Iveta,ivkobrlo,i.kobrlova@test.com

sodala jetzt hab ich das Problem, dass wenn ich dies per Bulkimport in meine DB integrieren möchte und ich als Fieldseperator "," eingebe - ich für das AD-Feld dn ("CN=Kobrlova Iveta,OU=CZ,OU=Users,OU=AT,DC=testdp,aom,DC=vienna") für jedes Komma ein eigen Spalte bekomme - ich möchte das aber in einer Spalte haben, weil es im AD auch noch Unterverzeichnisse gibt.

Jetzt hätte ich folgendes gemacht und das bring ich nicht zusammen:

Ich hätte einfach das textfile exportnoHeader vor dem bulkomport noch so bearbeitet, dass als Trennzeichen ein ";" verwendet wird aber ERST nach dem CN eintrag - also so sollte das dann aussehen:

"CN=Kobrlova Iveta,OU=CZ,OU=Users,OU=AT,DC=testdomain,DC=vienna";Iveta;Kobrlova Iveta;ivkobrlo;i.kobrlova@test.com

die Batchanweisung sollte also zwar alle Beistriche auf Komma ändern aber nicht wenn diese zwischen Anführungsstrichen stehen....

ist sowas möglich

Vielen Dank.


lg
roman

Content-Key: 188362

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

Printed on: April 19, 2024 at 21:04 o'clock

Member: bastla
bastla Jul 20, 2012 updated at 11:45:48 (UTC)
Goto Top
Hallo weini79 und willkommen im Forum!

Als Schnellschuss etwa so:
@echo off & setlocal
set "Ein=exportNoHeader.txt"  
set "Aus=exportNoHeaderSemicolon.txt"  

del "%Aus%" 2>nul  
(for /f "usebackq delims=" %%i in ("%Ein%") do (  
    set "Zeile="      
    for %%a in (%%i) do call :ProcessToken %%a
    setlocal enabledelayedexpansion
    echo !Zeile:~,-1!
    endlocal
))>>"%Aus%"  
goto :eof

:ProcessToken
set "Zeile=%Zeile%%1;"  
goto :eof
Grüße
bastla
Member: weini79
weini79 Jul 24, 2012 at 06:42:16 (UTC)
Goto Top
Hallo Bastla,

Vielen Dank für deine Antwort - ich bin jetzt schon einen Schritt weiter - habe aber noch ein kleines Problem, nämlich werden "," am Ende verschluckt - welchen ich aber für den Import in meine SQL Datenbank mittels bulkimport brauche(PS: ich hab jetzt vom AD nur noch DN, accountname und email herangezogen):

Zeilenausschnitt vorher:

"CN=EDVLager,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=viennae",EDVLager,
"CN=Einkauf,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=vienna",einkauf,procurement@test.com
"CN=Info,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=vienna",info,
"CN=Office RU,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=vienna",officeru,office-ru@test.com

Zeilenausschnitt nachher:
"CN=EDVLager,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=vienna";EDVLager
"CN=Einkauf,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=vienna";einkauf;procurement@test.com
"CN=Info,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=vienna";info
"CN=Office RU,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=vienna";officeru;office-ru@test.com

Könntest du mir da nocheinmal helfen?

Vielen Dank.
weini79
Member: bastla
bastla Jul 24, 2012 at 07:58:11 (UTC)
Goto Top
Hallo weini79!

Ändere die Zeile 10 auf
echo !Zeile!
Grüße
bastla
Member: weini79
weini79 Jul 24, 2012 at 08:07:30 (UTC)
Goto Top
YESSSSS - Strike Super Danke -noch eine kurze Frage - mein Script sieht jetzt so aus: ADExport.bat:

csvde -f export.txt -l sAMAccountName,mail -d "OU=Users, OU=AT, dc=testdomain, dc=vienna" -r objectClass=user

findstr /V /C:"DN" export.txt > exportNoHeader.txt

@echo off & setlocal

set "Datei=c:\adexport\exportNoHeader.txt

@echo off & setlocal
set "Ein=exportNoHeader.txt"
set "Aus=exportNoHeaderSemicolon.txt"

del "%Aus%" 2>nul
(for /f "usebackq delims=" %%i in ("%Ein%") do (
set "Zeile="
for %%a in (%%i) do call :ProcessToken %%a
setlocal enabledelayedexpansion
echo !Zeile!
endlocal
))>>"%Aus%"
goto :eof

:ProcessToken
set "Zeile=%Zeile%%1;"
goto :eof

sqlcmd -i Bulkimport.sql


der letzte Befehl der Bulkimport wird aber jetzt nicht mehr ausgeführt, muss ich den Bulkimport irgendwo anders plazieren, oder muss ich mit 2 bat Dateien arbeiten?
Member: bastla
bastla Jul 24, 2012 at 08:57:05 (UTC)
Goto Top
Hallo weini79!

Der Teil ab ":ProcessToken" ist ein Unterprogramm - das Hauptprogramm endet (durch "goto :eof") unmmittelbar davor, daher Deine "Bulkimport"-Zeile vor dem ersten "goto :eof" platzieren (wenn Du "Code"-Formatierung verwendet hättest, hätte ich die Zeilennummer genannt face-wink) ...

Grüße
bastla
Member: weini79
weini79 Jul 24, 2012 at 09:45:07 (UTC)
Goto Top
Hallo Bastla - peinlich.

Danke - und sorry wegen der Code-Formatierung
Member: weini79
weini79 Jul 24, 2012 at 09:59:24 (UTC)
Goto Top
So jetzt hab ich noch eine Kleinigkeit - es wäre mir ja egal, weil das kann ich am SQL auch lösen, aber er macht halt jetzt überall hinten ein ";" - auch in den Zeilen wo vorher keines war:

"CN=EDVLager,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=vienna";EDVLager;
"CN=Einkauf,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=vienna";einkauf;procurement@test.com;
"CN=Info,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=vienna";info;
"CN=Office RU,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=vienna";officeru;office-ru@test.com;

brauchen täte ich nur:

"CN=EDVLager,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=vienna";EDVLager;
"CN=Einkauf,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=vienna";einkauf;procurement@test.com
"CN=Info,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=vienna";info;
"CN=Office RU,OU=Common,OU=Users,OU=AT,DC=testdomain,DC=vienna";officeru;office-ru@test.com

hättest du da auch eine Idee?
Member: bastla
bastla Jul 24, 2012 at 11:38:53 (UTC)
Goto Top
Hallo weini79!
er macht halt jetzt überall hinten ein ";" - auch in den Zeilen wo vorher keines war:
Deswegen hatte ich es ja in der ersten Version abgeschnitten ...

Sollte so gehen (ungetestet)
@echo off & setlocal
set "Exp=export.txt"  
set "Ein=exportNoHeader.txt"  
set "Aus=exportNoHeaderSemicolon.txt"  
set "Datei=c:\adexport\exportNoHeader.txt  

csvde -f "%Exp%" -l sAMAccountName,mail -d "OU=Users, OU=AT, dc=testdomain, dc=vienna" -r objectClass=user  

findstr /VC:"DN" "%Exp%">"%Ein%"  

del "%Aus%" 2>nul  
(for /f "usebackq delims=" %%i in ("%Ein%") do (  
    set "EinZeile=%%i"  
    set "Zeile="  
    for %%a in (%%i) do call :ProcessToken %%a
    setlocal enabledelayedexpansion
    if "!EinZeile:~-1!"==";" (echo !Zeile!) else (echo !Zeile:~,-1%!)  
    endlocal
))>>"%Aus%"  

sqlcmd -i Bulkimport.sql
goto :eof

:ProcessToken
set "Zeile=%Zeile%%1;"  
goto :eof
Grüße
bastla
Member: weini79
weini79 Jul 24, 2012 at 12:59:20 (UTC)
Goto Top
pfeift - Vielen Dank.
Thanks a lot