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 LDIFDE Informationen aus LDAP auslesen und mit Batch weiterverarbeiten

Frage Entwicklung Batch & Shell

Mitglied: snakerl

snakerl (Level 1) - Jetzt verbinden

13.04.2012, aktualisiert 18.10.2012, 5679 Aufrufe, 22 Kommentare

Es wird versucht, die AD-Daten mit LDIFDE auszulesen, in eine temporäre Datei zu schreiben und diese dann so auszulesen, dass die gewünschten Werte in einer Batchdatei als Variablen weiterverarbeitet werden können. Dabei sollen Umlaute und Sonderzeichen unterstützt werden. Die erzeugten Variablen werden anschließend in eine HTML und eine TXT-Datei geschrieben, welche dem Outlook als Signatur untergeschoben werden kann.

Tags: LDAP, LDIFDE, Unicode, Active Directory, AD, Batch, Outlook, Signatur, Umlaute, Findstr, type

Die Batch liegt auf einem zentralen Share und wird dort auch augerufen, also per UNC-Pfad.
Wer die LDIF-Ausgaben kennt, weiß, dass ich hier erst einmal Leerzeichen entfenen muss. Mit Hilfe des Threads hier (http://www.administrator.de/frage/leerzeichen-am-anfang-und-ende-einer- ...) konnte ich dem aber abhelfen. Das habe ich nun bereits:

01.
@echo off 
02.
set dc=dc1.domain.intern 
03.
set programpath=\\dc1\deploy$\AutoSignature 
04.
 
05.
if exist "%userprofile%\%username%.txt" del "%userprofile%\%username%.txt" 
06.
"%programpath%\ldifde.exe" -f "%userprofile%\%username%.txt" -s %dc% -r "(userPrincipalName=%username%@%userdnsdomain%)" 
07.
if not exist "%userprofile%\%username%.txt" goto NOTXT 
08.
 
09.
For /F "tokens=2 delims=:" %%a in ('find "company: " "%userprofile%\%username%.txt"') Do @Set Firma=%%a 
10.
if "%Firma%"=="" GOTO NOENTRY 
11.
 
12.
set var1="%Firma%" 
13.
 
14.
:loop1  
15.
if "%var1:~0,1%"==" " set "var1=%var1:~1%" & goto :loop1  
16.
 
17.
:loop2  
18.
if "%var1:~-1%"==" " set "var1=%var1:~0,-1%" & goto :loop2  
19.
 
20.
echo %var1% 
21.
pause 
22.
EXIT 
23.
 
24.
:NOTXT 
25.
echo Es ist keine Textdatei vorhanden 
26.
pause 
27.
exit 
28.
 
29.
:NOENTRY 
30.
echo Ein Eintrag fehlt 
31.
pause 
32.
exit
Die Informationen in der LDIF sehen alle so aus (User ist ein Testuser, Restdaten habe ich abgeändert, um es zu anonymisieren ;) ):

01.
dn: CN=Bloßner\, Jürgen,OU=Benutzer,OU=FIRMA,DC=Domain,DC=intern 
02.
changetype: add 
03.
objectClass: top 
04.
objectClass: person 
05.
objectClass: organizationalPerson 
06.
objectClass: user 
07.
c: DE 
08.
l: Nürnberg 
09.
st: Bayern 
10.
postalCode: 90419 
11.
telephoneNumber: +49(0)911-999-88 
12.
facsimileTelephoneNumber: +49(0)911-999-30 
13.
givenName:: SsO8cmdlbg== 
14.
 1pbnRlcm4= 
15.
instanceType: 4 
16.
whenCreated: 20120413135039.0Z 
17.
whenChanged: 20120413135710.0Z 
18.
uSNCreated: 2821005 
19.
memberOf: CN=Mitarbeiter,OU=Gruppen,OU=FIRMA,DC=Domain,DC=intern 
20.
uSNChanged: 2821131 
21.
co: Deutschland 
22.
company: Blubber & Rüsselsheimer GmbH & Co. KG 
23.
.... (geht noch weiter)
Mit Absicht habe ich den Namen und die Firma mit etwas mehr Sonderzeichen und Umlauten versehen, als das wohl wirklich der Fall ist.

Nun meine Fragen:

- Sobald ein "&" in den Firmennamen kommt, kann ich das nicht weiterverarbeiten, wie löse ich das am einfachsten (so, dass auch Umlaute kein Problem sind). Der Fehler tritt wohl bei der Loopverarbeitung ab ":loop1" auf, vermutlich im Zusammenhang mit den Anführungszeichen.
- die beiden Loops sind zwar ziemlich nett, aber ich möchte nicht für jede Variable einen neuen Doppelloop anlegen und umbenennen. Geht das auch so, dass ich alle Variablen zunächst auslese und anschließend der Reihe nach durch diese Loop-Leerzeichenprüfung schicke?

Falls es relevant ist, die zu findenden Inhalte in der TXT sind folgende:

telephoneNumber:
facsimileTelephoneNumber:
company:
streetAddress:
wWWHomePage:
mail:
postalCode:
info:

Danke euch
Mitglied: 60730
13.04.2012 um 18:04 Uhr
moin,

klitschkokleiner Gegenfragenkatalog...

Mit Absicht habe ich den Namen und die Firma mit etwas mehr Sonderzeichen und Umlauten versehen, als das wohl wirklich der Fall ist.
Du weißt schon, das man üblicherweise einen fetten Bogen um Sonderzeichen in der AD macht und willst das trotzdem bauen?
Falls es relevant ist, die zu findenden Inhalte in der TXT sind folgende:

telephoneNumber: 
facsimileTelephoneNumber: 
company: 
streetAddress: 
wWWHomePage: 
mail: 
postalCode: 
info: 
ich weiß das ein 1biteinzeiler gegen ein 32zeiler bescheiden aussieht, aber warum nicht trotzdem und genau deshalb?
01.
dsquery user -limit 0|dsget user -tel -fax -office -bla -blub -anything ?
Bitte warten ..
Mitglied: bastla
13.04.2012 um 18:17 Uhr
... und zur Not sollte auch CSVDE besser Verarbeitbares liefern als LDIFDE ...

Grüße
bastla
Bitte warten ..
Mitglied: snakerl
13.04.2012 um 19:42 Uhr
Ich würde ja gerne, aber einerseits möchte ich für alle Eventualitäten gerüstet sein (schreibe Scripts auch gerne so, dass sie woanders lauffähig sind). Zudem wird nun mal die Firma z. B. mit einem "&" geschrieben, deshalb ja auch "Firmen-Und" :D Und dieses bekomm ich da nicht raus, es macht aber auch die meisten Probleme. Zudem wäre es mir neu, dass das AD keine Umlaute beherrscht. Kommt doch auch immer auf das Feld an. Wie man auch teilweise sehen kann ist mein Testuser zwar mit "Jürgen Bloßner" angelegt, hat jedoch als username blossner@domain.intern bzw. als email blossner@domain.com. OK, was mir grade aufgefallen ist, dass ich den Anzeigenamen nicht korrigiert habe, den ändere ich seit geraumer Zeit auf die umlautlose Variante um, also "Blossner, Juergen" (da diese Info mit in den Anzeigenamen bei Emails eingeht).

Dein Argument mit dsget/dsquery lass ich nur teilweise zu, es gibt LDAP-Informationen, an die ich nur mit LDIFDE oder CSVDE rankomme, für den rest brauch ich ja dann doch wieder LDIFDE und steh dann vorm gleichen Problem, also wollte ich nicht zig Programme verwenden, sondern am besten 1x auslesen, Datei erzeugen und diese dann auswerten und weiterverarbeiten. Wenn es sich aber nicht vermeiden lässt, werde ich dennoch auf beide Tools zurückgreifen müssen, die (nutzbaren) Kürzel hab ich bereits rausgesucht. Alles was ich bislang gefunden hatte (ich hatte mein "Projekt" ja zunächst mit dsget gestartet) war das:

01.
rem @echo off 
02.
 
03.
For /F "delims=" %%a in ('dsquery user domainroot -upn %username%@%userdnsdomain%') Do Set DistName=%%a 
04.
 
05.
For /F "delims= " %%b in ('dsget user %DistName% -email^| find /v "dsget"') Do Set Mail=%%b 
06.
echo %Mail% 
07.
 
08.
For /F "delims= " %%c in ('dsget user %DistName% -tel^| find /v "dsget"') Do Set Tel=%%c 
09.
echo %Tel% 
10.
 
11.
For /F "delims= " %%d in ('dsget user %DistName% -fax^| find /v "dsget"') Do Set Fax=%%d 
12.
echo %Fax% 
13.
 
14.
For /F "delims=" %%e in ('dsget user %DistName% -company^| find /v "dsget"') Do Set Firma=%%e 
15.
echo %Firma% 
16.
 
17.
For /F "delims= " %%f in ('dsget user %DistName% -fn^| find /v "dsget"') Do Set Vorname=%%f 
18.
For /F "delims= " %%g in ('dsget user %DistName% -ln^| find /v "dsget"') Do Set Nachname=%%g 
19.
echo %Vorname% %Nachname% 
20.
 
21.
For /F "delims= " %%h in ('dsget user %DistName% -webpg^| find /v "dsget"') Do Set Homepage=%%h 
22.
echo %Homepage% 
23.
 
24.
For /F "delims=" %%i in ('dsget user %DistName% -title^| find /v "dsget"') Do Set Titel=%%i 
25.
echo %Titel% 
26.
pause

@bastla: das musst du mir jetzt mal genau erklären, die beiden Programme setzen doch meines Wissens nach auf den gleichen "Übersetzer" bzw. die selbe Schnittstelle, die Ausgabe erfolgt bei beiden per default in ANSI und manche Werte mit Umlauten werden mit base64 (?) übersetzt (die haben dann ein "=" am Ende). Wo lägen denn die Vorteile bei CSVDE (meine Versuche, mit dem Parameter "-u" LDIFDE dazu zu zwingen, die Ausgabe in UNICODE zu tätigen sind bislang gescheitert, der Geier weiß warum ^^)?


PS: Vielen Dank, dass ihr euch zu dieser unchristlichen Feierabendzeit noch zu einer Antwort durchringen konntet, weiß ich zu schätzen
Bitte warten ..
Mitglied: 60730
13.04.2012 um 21:07 Uhr
Salve,

ich fang mal von hinten an..
PS: Vielen Dank, dass ihr euch zu dieser unchristlichen Feierabendzeit noch zu einer Antwort durchringen konntet, weiß ich zu schätzen
Sag ich mal so - schau mal, was in diesem Administrator.de genannten Forum in den letzten Tagen, Wochen und Monaten so an hochgradigen Fragen hier liegen gelassen wurde, da ist "sowas" eher Anspruchsvoll.

  • Dann welche Daten fehlen dir denn beim DSget /?
  • und vielleicht auch wozu?
  • mit dsget /dsquery holst du pro user eine Zeile raus, die genau die daten hat, die du willst und mit kleinen Tricks kannst du jeden &%*,?ß wert in einer so erzeugten Spalte verwerten.
  • Last but not least..Ich mach ja manche Sachen auch über den User, aber verbiegen von Daten in der Ad, mach ich lieber selber (damit spiele ich auch %username% an)

Gruß
Bitte warten ..
Mitglied: snakerl
13.04.2012 um 21:31 Uhr
Also Sinn und Zweck des Rausholens dieser Informationen ist eine Emailsignatur, die damit geschrieben wird. Ich hab bereits ein Script, welches super läuft, und eine HTML und eine TXT-Signatur für das Outlook erstellt (mit Backup der alten etc.). Darin sind aber viele Werte als Variable im Script festgelegt bzw. dynamische Werte werden vom User abgefragt, ich würde das jedoch lieber direkt aus dem AD auslesen können und dem User das Script beim Logon einfach unterschieben. Mit einem Blick auf den "lastchange" könnte man dann das Script auch rechtzeitig abbrechen lassen.

Bin zwar kein großer Batcher, aber ich habs immerhin geschafft, eine irgendwie lauffähige Version zu erzeugen (immerhin hat es beim Rollout in unserer Firma sehr gut geklappt ).

Is mir jetzt etwas peinlich, euch Profis so ein Amateurscript zu zeigen, aber na gut, ich hab es damals dokumentiert, in meinem nicht sonderlich beladenen Blog:
http://snakerl.blogspot.de/2011/03/outlook-signatur-generieren-skript.h ...
Ich muss grad selbst lachen, man lernt ja über die Zeit doch dazu. Die vielen Echo.s *hust* na gut. Sicherlich sind da mehrere Ärsche voll Verbesserungsmöglichkeiten, deswegen nicht in der Luft zerreissen bitte :D

Der Basisbaustein, der die Signatur erstellt, den würde ich so übernehmen, die Variablen aber würde ich nun gerne über das AD beziehen. Der User selber hat ja Leserechte, jedoch keine Schreibrechte, es wird auch nur Exportiert, nichts geändert oder dergleichen.

Was ich benötige, ist z. B. das "Info" Feld, das bekomm ich über dsget nicht. Mehr is mir jetzt gerade nicht eingefallen (ist etwas her, als ich auf LDIFDE umgeschwenkt bin, habe das Projekt erst wieder angepackt, nachdem es jetzt locker n en Monat brach lag :D)

ungefähr so solls aussehen:

Textbaustein (MfG)

Info (z. B. "ppa" oder "i. A." oder "i. V." und solche Sachen) Vorname Nachname
Titel bzw. Funktion
Firma
Straße Hausnummer

Landkürzel-PLZ Ort
Telefon
Fax
Mailadresse
Firmenhomepage

weitere Textbausteine

Eine Option, ggf. mal das Büro mit anzugeben, wäre auch nett, aber wird derzeit noch nicht benötigt.
Bitte warten ..
Mitglied: bastla
13.04.2012 um 21:54 Uhr
Hallo snakerl!

Mein Hinweis auf CSVDE bezog sich eigentlich darauf, dass die Zerlegung einer Zeile aus einer CSV-Datei einfacher ist, als die zig Zeilen einer LDIFDE-Ausgabe abzugrasen ...
Hinsichtlich des "&" würde es schon mal helfen, so lange wie möglich (und so früh wie möglich - siehe Zeile 9 Deines ersten Ansatzes) die Variablenwerte unter Anführungszeichen zu verwenden - daher also
01.
For /F "tokens=2 delims=:" %%a in ('find "company: " "%userprofile%\%username%.txt"') Do Set "Firma=%%a" 
02.
if "%Firma%"=="" GOTO NOENTRY  
03.
set "var1=%Firma%"
Die Ausgabe selbst kannst Du dann mit
01.
setlocal enabledelayedexpansion 
02.
echo !var1! 
03.
endlocal
"entschärfen" ...
Auch immer ein Thema hinsichtlich der Sonderzeichenbehandlung: Vorweg Codepage auf 1252 setzen:
chcp 1252 >nul
Wenn Du übrigens die Zeile 9 etwas variierst, hast Du zumindest das Leerzeichen vorneweg gleich mal vom Hals:
For /F "tokens=1* delims=: " %%a in ('find "company: " "%userprofile%\%username%.txt"') Do Set "Firma=%%b"
Grüße
bastla
Bitte warten ..
Mitglied: snakerl
14.04.2012 um 19:25 Uhr
Ehrlich gesagt haben die beiden letzten Zeielen von dir bereits dazu geführt, dass ich schon mal die Daten mit & etc. auslesen kann, cool

Ich hab sämtliche Räte mal befolgt und habe gemerkt, dass ich mir die loops schenken kann, korrekt? Ich bin nur noch nich ganz dahinter gestiegen, warum :D

Bastla, wenn du Zeit hättest, könntest du mir grob erklären, wie du das geschafft hast :D
Wäre natürlich geil, wenn ich dieses Nachbearbeiten mit dem Loop nicht bräuchte.

Fettes Danke schon mal ;)
Bitte warten ..
Mitglied: bastla
14.04.2012, aktualisiert 18.10.2012
Hallo snakerl!

Schön, wenn's hilft ...
Hinsichtlich der "problemlosen" Ausgabe von Batch-Sonderzeichen wie "&" verlasse ich mich ganz auf jeb-the-batcher (siehe zB hier oder da), und was das Vermeiden des führenden Leerzeichens angeht, wird dieses einfach als Delimiter definiert - da jede Eigenschaft am Anfang der Zeile ja ohne Leerzeichen angegeben ist, wird in der Schleife daraus "%%a" und wegen der Token-Angabe "1*" wird danach nicht mehr getrennt, sodass alles nach dem ersten Doppelpunkt bzw Leerzeichen (aufeinanderfolgende Delimiter werden in "for"-Schleifen nur als ein einziges Trennzeichen interpretiert) als "%%b" zur Verfügung steht ...

Grüße
bastla
Bitte warten ..
Mitglied: snakerl
16.04.2012 um 10:59 Uhr
Danke dir Bastla.

Leider muss ich zugestehen, dass ihr natürlich doch irgendwo Recht hattet: LDIFDE is generell erstmal ungünstig für die Aktion. Ich bring LDIFDE nicht dazu, mir meine Ausgabe in Klartext auszugeben. Eine Ausgabe in Unicode sollte theoretisch mit "-u" möglich sein, aber dann ist der komplette Inhalt der Textdatei nicht mehr lesbar.

Merkwürdig auch die Regel, wann eine Ausgabe verschlüsselt wird und wann nicht, ich nehme an, es liegt an Umlauten oder Eszet.

Während das Script mit meinem Namen bislang sehr gut läuft, habe ich bei Jürgen Bloßner mit der Titelbezeichnung "Straßen- & Kärcher-Verantwortlicher" :D bei Vor, Nachname und Titelbzeichnung ne kryptische Ausgabe.

Theoretisch könnte ich bei diesen 3 Ausnahmen natürlich DSGET verwenden, aber Umlaute können ja auch mal im Firmenzeichen etc. auftreten (und das Script soll ja wie gesagt, wenn es sich einrichten lässt, nicht nur bei mir laufen). Jemand ne Idee, wie ich LDIFDE dazu bewege, mir ne lesbare Version auszugeben?

EDIT:
Oh, hier hatte jemand wohl das gleiche Problem :D
http://www.system-administrator.eu/index.php?content=137007&thread= ...
Bitte warten ..
Mitglied: bastla
16.04.2012 um 11:32 Uhr
Hallo snakerl!

Und wie sieht's mit CSVDE aus?

Grüße
bastla
Bitte warten ..
Mitglied: snakerl
16.04.2012 um 11:58 Uhr
Geil, hier greift immerhin der Schalter "-u". Offenbar hab ich das schon richtig verstanden, aber die LDIFDE.EXE hat hier nen Fehler? Denn ansonsten is sich ja CSVDE und LDIFDE sehr ähnlich, wenn nicht sogar identisch (Parameter, Hilfstext usw.). Nur weiß ich leider nicht, wie man CSVDE auslesen sollte. Ich hab die Anfangskürzel nicht, an die ich mich sonst halten konnte. Es gibt bei CSV ja auch nur 2 Zeilen, einmal Überschrift und einmal Inhalte, getrennt durch Kommas. Die Inhalte stehen auch immer an anderen Stellen, wenn z. B. Inhalte nicht gefüllt sind im AD (z. B. "Fax"), dann wird dieser Punkt nicht in der CSV/LDIF Ausgabe angegen (facsimileTelephoneNumber). Deswegen hat es mich am Anfang auch gewundert, dass du CSVDE für die einfachere Ausgabe hälst ...

EDIT:
Ich bekomms leider nicht hin. Die Ausgabe variiert; ist ein auszugebendes Feld leer ist, wird es nicht exportiert, auch nicht als leeres Feld (also bei csv: "blub,bla,,blub").

Diese Ausgabe hier hätte nur die Inhalte geschrieben, die ich auch brauche:

01.
csvde.exe -u -s dcserver.domain.intern -r "(userPrincipalName=%username%@%userdnsdomain%)" -f "%userprofile%\%username%.csv" -l info,givenName,sn,title,company,streetAddress,c,postalCode,l,telephoneNumber,facsimileTelephoneNumber,mail,wWWHomePage
Ein typisches Feld, das aber z. B. mal gefüllt und mal leer ist, ist "info". Ich kann also nicht mit "for /f" die csv auslesen und die Delims auf Komma setzen und einfach pro Variable den Token ändern, da bei einem leeren Infofeld der Token nicht mehr stimmt. Das ist doch alles Scheiße
Bitte warten ..
Mitglied: bastla
16.04.2012 um 16:45 Uhr
Hallo snakerl!
Die Inhalte stehen auch immer an anderen Stellen, wenn z. B. Inhalte nicht gefüllt sind im AD (z. B. "Fax"), dann wird dieser Punkt nicht in der CSV/LDIF Ausgabe angegen (facsimileTelephoneNumber).
Das wäre das kleinere Problem (der Feldinhalt ergibt sich ja aus der Feldliste in Zeile 1), aber die "unsaubere" Ausgabe (es werden nur Felder, welche zumindest ein Komma enthalten, unter Anführungszeichen ausgegeben, nicht aber solche mit enthaltenen Leerzeichen) hatte ich nicht bedacht - das macht die Zerlegung (per "for %%i" oder per "call" mit "shift" im Unterprogramm) dann doch sehr unhandlich ...

Wäre VBS für Dich eine Option?

Grüße
bastla
Bitte warten ..
Mitglied: snakerl
16.04.2012 um 16:59 Uhr
Hm, naja, theoretisch kann ich ja auch einfach dsget verwenden und die Einträge so rausziehen. Das Info-Feld müsste ich halt seperat beziehen, oder ich schummle und setze den Wert woander (z. B. bei Pager, der nie verwendet wird), was mir aber natürlich etwas widerstrebt ;)

VBS ... Beherrsche ich leider gar nicht, wenn mir jemand etwas skriptet, kann ich es vielleicht noch irgendwo nachvollziehen, aber selber darin schreiben klappt leider nicht

EDIT:
Oder ich mach pro Variable eine Abfrage, was den Vorgang des Scripts aber ziemlich verzögert. Aber das wäre sie sauberste Methode, die mir grade einfällt :/
Bitte warten ..
Mitglied: snakerl
17.04.2012 um 11:55 Uhr
Und jetzt weiß ich auch wieder, warum ich DSGET nicht verwenden wollte. Straße, Hausnummer, PLZ, Ort und Landkürzel lassen sich nicht auslesen -.-
Bitte warten ..
Mitglied: bastla
17.04.2012, aktualisiert 18.10.2012
Hallo snakerl!

Dann vielleicht doch VBS ...

Wie soll's denn danach eigentlich weitergehen?

Grüße
bastla
Bitte warten ..
Mitglied: snakerl
17.04.2012 um 13:28 Uhr
Mein Post, in dem ich aufs Übelste auf die buggy Tools von M$ schimpfen wollte, war fast fertig, da kam mir der Geistesblitz. Ich bin so ein dummer Mensch. Im von mir verlinkten Forenpost wurde es schon angedeutet und ich habe den Hinweis übersehen -.-

Ich habe gerade auf meinem letzten Windows Server 2003 nachgeschaut und mir dort mal die "LDIFDE.EXE" ausgeliehen und auf meinen Share kopiert. Mit "-u" mein LDIF-Command ausgeführt und siehe da: es läuft

Lösung also: Keine LDIFDE.EXE von den Windows Server 2008 (R2) Servern verwenden. Shame on you MS!!!

EDIT:
Komisch, das Programm "FINDSTR" kann offenbar mit der Datei nicht umgehen. Mit "FIND" klappt es zwar, aber ist mir etwas gefährlich, Gerade bei Angaben wie "c: " kann es ja leicht passieren, dass mehrere Werte in der TXT stehen. Jemand ne Idee bzw kennt das Phänomen? Gehe ich mit FINDSTR auf die TXT los, zeigt er mir zwischen jedem Buchstaben ein Leerzeichen an ...? WTF?

Last Edit:
Tja, tatsache, die Kodierung packt "Findstr" nicht. Also noch ne 2te TXT erzeugen (type altedatei.txt > neuedatei.txt) und die Daten dort reinschreiben, wenn die Codepage vorher gesetzt wurde, klappt das dann auch mit Umlauten. Problem war mit "Find" folgendes: sowohl "l: " (Land) als auch "mail: " haben bei einem "Find" die gleiche Endung, somit stand anstatt des Ortes immer die Mailaddy drin ;)

PS:
Ich habe es gerade fertiggestellt, das Script, mit allen Kniffen und Tricks. Mal wieder ne Menge gelernt und Wissen aufgestockt. Danke an alle, die mitgeholfen haben.
Wenn Interesse besteht, ich würde das Teil gerne wieder veröffentlichen, vielleicht hilft es ja jemanden. Das dann aber morgen
Bitte warten ..
Mitglied: bastla
17.04.2012 um 17:39 Uhr
Hallo snakerl!
Wenn Interesse besteht, ich würde das Teil gerne wieder veröffentlichen, vielleicht hilft es ja jemanden
Wäre ein schöner Abschluss des Threads (dessen Titel Du dann vielleicht noch etwas ergänzen könntest, damit Dein Script leichter gefunden werden kann) ...
Zu "findstr": Eine automatische Konvertierung von Unicode (wie zB durch "type") fehlt da tatsächlich - aber ohne weitere TEMP-Datei sollte sich das trotzdem machen lassen:
type altedatei.txt|findstr
Grüße
bastla
Bitte warten ..
Mitglied: snakerl
18.04.2012 um 13:45 Uhr
Da ist das Ding, ich hoffe, ich habe alles so weit anonymisiert, wie möglich
http://snakerl.blogspot.de/2011/03/outlook-signatur-generieren-skript.h ...

Funktioniert im Übrigen klasse bei uns, habe den Rollout der neuen Signaturen heute begonnen.
Damit das auch in den Google-Suchkontext einfliesst, habe ich den Startbeitrag noch einmal bearbeitet.

Danke an alle helfenden Hände
Bitte warten ..
Mitglied: bastla
18.04.2012 um 16:44 Uhr
Hallo snakerl!

Ein wenig vermisse ich in Deinem Script das Auslesen des AD ...
Nur so am Rande:
01.
:MAKEDIR 
02.
If exist %SIGPATH% goto SAVE_SIG 
03.
If exist %APPDATA%\Microsoft mkdir %SIGPATH% && goto SAVE_SIG 
04.
mkdir %APPDATA%\Microsoft 
05.
mkdir %SIGPATH% 
06.
 
07.
REM ========================================== 
08.
REM Fertige Backup der alten Signatur(en) an 
09.
REM ========================================== 
10.
:SAVE_SIG 
11.
If not exist %SIG_BACKUP% mkdir %SIG_BACKUP% 
12.
XCOPY /I /T /Y /E %SIGPATH%\* %SIG_BACKUP%\%datum%_%zeit% 
13.
XCOPY /I /Y /E %SIGPATH%\* %SIG_BACKUP%\%datum%_%zeit% 
14.
RD /Q /S %SIGPATH% 
15.
 
16.
REM ========================================== 
17.
REM Erstelle den Ordner "Signatures" und setze 
18.
REM den Zeichensatz um, zur korrekten Handhabung 
19.
REM der Umlaute 
20.
REM ========================================== 
21.
:GENERATE 
22.
If not exist %SIGPATH% mkdir %SIGPATH%
ließe sich reduzieren auf
01.
:MAKEDIR 
02.
REM ========================================== 
03.
REM Fertige Backup der alten Signatur(en) an 
04.
REM ========================================== 
05.
If exist %SIGPATH% xcopy /ey %SIGPATH%\* %SIG_BACKUP%\%datum%_%zeit%\ 
06.
RD /Q /S %SIGPATH% 
07.
md %SIGPATH%
Sowohl "md" als auch "xcopy" erstellen bei Bedarf die gesamte Pfadstruktur ...

Grüße
bastla
Bitte warten ..
Mitglied: snakerl
18.04.2012 um 21:01 Uhr
Das ist alles? Ich hab eigentlich erwartet, du kommst jetzt mit 100 Tipps, wie man zig Dinge einfacher machen könnte :D Wenn das wirklich alles an Einwand von dir ist, fühl ich mich geschmeichelt ;)
Ja, müsste mir die Parameter noch mal genau anschauen, diese Passage sind schon über ein Jahr alt, wer weiß was mich damals geritten hat, vielleicht hatte ich auch teilweise mit "copy" und "xcopy" gespielt und dann etwas vergessen rauszunehmen. Fakt ist aber: die Verzeichnisse werden auf Biegen und Brechen versucht zu erstellen ;)
Bitte warten ..
Mitglied: bastla
18.04.2012 um 21:07 Uhr
Hallo snakerl!

Eigentlich warte ich ja noch auf die Endfassung ...

... aber
01.
REM ========================================== 
02.
REM Schleife zum Beenden der Outlook.exe 
03.
REM ========================================== 
04.
:STOP_OUTLOOK 
05.
echo. 
06.
TaskList /FI "IMAGENAME eq OUTLOOK.EXE" 2>NUL | Find "OUTLOOK.EXE" >NUL 
07.
IF ERRORLEVEL == 1 ( 
08.
  GOTO START 
09.
  ) ELSE ( 
10.
    GOTO Loop 
11.
12.
    
13.
:Loop 
14.
echo. 
15.
echo. 
16.
echo. 
17.
echo Der Prozess "OUTLOOK.EXE" ist noch nicht beendet. 
18.
echo Bitte beenden Sie Outlook, bevor Sie fortfahren! 
19.
echo. 
20.
pause 
21.
goto STOP_OUTLOOK
ließe sich zB auch so schreiben:
01.
REM ========================================== 
02.
REM Schleife zum Beenden der Outlook.exe 
03.
REM ========================================== 
04.
:STOP_OUTLOOK 
05.
echo. 
06.
TaskList /FI "IMAGENAME eq OUTLOOK.EXE" 2>NUL | Find "OUTLOOK.EXE" >NUL || GOTO START 
07.
echo. 
08.
echo. 
09.
echo. 
10.
echo Der Prozess "OUTLOOK.EXE" ist noch nicht beendet. 
11.
echo Bitte beenden Sie Outlook, bevor Sie fortfahren! 
12.
echo. 
13.
pause 
14.
goto STOP_OUTLOOK
- auch, weil es entweder
IF ERRORLEVEL 1
oder
if %ERRORLEVEL%==1
heißen sollte ...

Grüße
bastla
Bitte warten ..
Mitglied: snakerl
18.04.2012 um 21:32 Uhr
Ehrlich gesagt ebenfalls ein Part aus dem alten Script, den ich mir kein einziges Mal erneut angeschaut hab, Skript musste fertigwerden.

Werde es aber noch etwas optimieren, nicht zuletzt, damit die Ausgabe in RTF funktioniert. Aber das hatte ich bei der Ur-Version bereits probiert, mit dem Ergebnis, dass MS dort so viel Scheiße reinschreibt und ich einfach keine Lust hatte, diese Sig zu erstellen (wird abgesehen von den Outlook-eigenen Sonderanfragen (Besprechungsanfrage, Aufgaben etc.) eh nciht verwendet und zur Not kann man die Sig auch manuell einfügen.

Mal sehen, ob mich in den nächsten Tagen noch mal die Muse küsst und ich das nachhole.

Hättest du ne Idee, wie man sämtliche Umlaute in den Variablen für die HTML-Variante umsetzen könnte? Ich hätte vor, alle Variablen doppelt zu setzen (wie bei den Textbausteinen ebenfalls bereits umgesetzt), also %Firma% und %Firma_HTM%. Ich muss allerdings sagen, dass ich schon ewig nicht mehr gehört hätte, dass es bei ausländischen Rechnern zu Darstellungsproblemen gekommen wäre. Mittlerweile sollte die Darstellung von Unicode Inhalten keine Herausforderung mehr darstellen, oder?
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Mit Batchdatei Informationen auslesen und diese strukturiert in Excel ausgeben (9)

Frage von Flodsche zum Thema Batch & Shell ...

Batch & Shell
gelöst BATCH: Daten aus Textdatei auslesen und in neue Textdatei separieren (9)

Frage von Manuel1234 zum Thema Batch & Shell ...

Batch & Shell
Per Batch aktuell angemeldete User auslesen (1)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
gelöst Mit batch zeilen auslesen (2)

Frage von keksegriller zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...

Peripheriegeräte
Wlan stört Funkmaus (11)

Frage von Falaffel zum Thema Peripheriegeräte ...

Peripheriegeräte
gelöst USB Festplatte verliert Laufwerksbuchstabe (9)

Frage von cese4321 zum Thema Peripheriegeräte ...