snakerl
Goto Top

Mit LDIFDE Informationen aus LDAP auslesen und mit Batch weiterverarbeiten

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 (leerzeichen am anfang und ende einer batch Variablen entfernen (trim in php)) konnte ich dem aber abhelfen. Das habe ich nun bereits:

@echo off
set dc=dc1.domain.intern
set programpath=\\dc1\deploy$\AutoSignature

if exist "%userprofile%\%username%.txt" del "%userprofile%\%username%.txt"  
"%programpath%\ldifde.exe" -f "%userprofile%\%username%.txt" -s %dc% -r "(userPrincipalName=%username%@%userdnsdomain%)"  
if not exist "%userprofile%\%username%.txt" goto NOTXT  

For /F "tokens=2 delims=:" %%a in ('find "company: " "%userprofile%\%username%.txt"') Do @Set Firma=%%a  
if "%Firma%"=="" GOTO NOENTRY  

set var1="%Firma%"  

:loop1 
if "%var1:~0,1%"==" " set "var1=%var1:~1%" & goto :loop1   

:loop2 
if "%var1:~-1%"==" " set "var1=%var1:~0,-1%" & goto :loop2   

echo %var1%
pause
EXIT

:NOTXT
echo Es ist keine Textdatei vorhanden
pause
exit

:NOENTRY
echo Ein Eintrag fehlt
pause
exit

Die Informationen in der LDIF sehen alle so aus (User ist ein Testuser, Restdaten habe ich abgeändert, um es zu anonymisieren ;) ):

dn: CN=Bloßner\, Jürgen,OU=Benutzer,OU=FIRMA,DC=Domain,DC=intern
changetype: add
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
c: DE
l: Nürnberg
st: Bayern
postalCode: 90419
telephoneNumber: +49(0)911-999-88
facsimileTelephoneNumber: +49(0)911-999-30
givenName:: SsO8cmdlbg==
 1pbnRlcm4=
instanceType: 4
whenCreated: 20120413135039.0Z
whenChanged: 20120413135710.0Z
uSNCreated: 2821005
memberOf: CN=Mitarbeiter,OU=Gruppen,OU=FIRMA,DC=Domain,DC=intern
uSNChanged: 2821131
co: Deutschland
company: Blubber & Rüsselsheimer GmbH & Co. KG
.... (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 face-smile

Content-ID: 183506

Url: https://administrator.de/forum/mit-ldifde-informationen-aus-ldap-auslesen-und-mit-batch-weiterverarbeiten-183506.html

Ausgedruckt am: 23.12.2024 um 12:12 Uhr

60730
60730 13.04.2012 um 18:04:00 Uhr
Goto Top
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?
dsquery user -limit 0|dsget user -tel -fax -office -bla -blub -anything ?
bastla
bastla 13.04.2012 um 18:17:55 Uhr
Goto Top
... und zur Not sollte auch CSVDE besser Verarbeitbares liefern als LDIFDE ...

Grüße
bastla
snakerl
snakerl 13.04.2012 um 19:42:12 Uhr
Goto Top
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:

rem @echo off

For /F "delims=" %%a in ('dsquery user domainroot -upn %username%@%userdnsdomain%') Do Set DistName=%%a  

For /F "delims= " %%b in ('dsget user %DistName% -email^| find /v "dsget"') Do Set Mail=%%b  
echo %Mail%

For /F "delims= " %%c in ('dsget user %DistName% -tel^| find /v "dsget"') Do Set Tel=%%c  
echo %Tel%

For /F "delims= " %%d in ('dsget user %DistName% -fax^| find /v "dsget"') Do Set Fax=%%d  
echo %Fax%

For /F "delims=" %%e in ('dsget user %DistName% -company^| find /v "dsget"') Do Set Firma=%%e  
echo %Firma%

For /F "delims= " %%f in ('dsget user %DistName% -fn^| find /v "dsget"') Do Set Vorname=%%f  
For /F "delims= " %%g in ('dsget user %DistName% -ln^| find /v "dsget"') Do Set Nachname=%%g  
echo %Vorname% %Nachname%

For /F "delims= " %%h in ('dsget user %DistName% -webpg^| find /v "dsget"') Do Set Homepage=%%h  
echo %Homepage%

For /F "delims=" %%i in ('dsget user %DistName% -title^| find /v "dsget"') Do Set Titel=%%i  
echo %Titel%
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 face-smile
60730
60730 13.04.2012 um 21:07:46 Uhr
Goto Top
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ß
snakerl
snakerl 13.04.2012 um 21:31:25 Uhr
Goto Top
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 face-smile ).

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.
bastla
bastla 13.04.2012 um 21:54:59 Uhr
Goto Top
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 face-wink - siehe Zeile 9 Deines ersten Ansatzes) die Variablenwerte unter Anführungszeichen zu verwenden - daher also
For /F "tokens=2 delims=:" %%a in ('find "company: " "%userprofile%\%username%.txt"') Do Set "Firma=%%a"  
if "%Firma%"=="" GOTO NOENTRY   
set "var1=%Firma%"  
Die Ausgabe selbst kannst Du dann mit
setlocal enabledelayedexpansion
echo !var1!
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
snakerl
snakerl 14.04.2012 um 19:25:54 Uhr
Goto Top
Ehrlich gesagt haben die beiden letzten Zeielen von dir bereits dazu geführt, dass ich schon mal die Daten mit & etc. auslesen kann, cool face-smile

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 ;)
bastla
bastla 14.04.2012, aktualisiert am 18.10.2012 um 18:50:38 Uhr
Goto Top
Hallo snakerl!

Schön, wenn's hilft ...
Hinsichtlich der "problemlosen" Ausgabe von Batch-Sonderzeichen wie "&" verlasse ich mich ganz auf 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
snakerl
snakerl 16.04.2012 um 10:59:55 Uhr
Goto Top
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
W2k7 Server Ldifde Export - Umlautprobleme&thread=false
bastla
bastla 16.04.2012 um 11:32:27 Uhr
Goto Top
Hallo snakerl!

Und wie sieht's mit CSVDE aus?

Grüße
bastla
snakerl
snakerl 16.04.2012 um 11:58:17 Uhr
Goto Top
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:

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 ###e face-sad
bastla
bastla 16.04.2012 um 16:45:41 Uhr
Goto Top
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 ... face-sad

Wäre VBS für Dich eine Option?

Grüße
bastla
snakerl
snakerl 16.04.2012 um 16:59:40 Uhr
Goto Top
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 face-confused

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 :/
snakerl
snakerl 17.04.2012 um 11:55:04 Uhr
Goto Top
Und jetzt weiß ich auch wieder, warum ich DSGET nicht verwenden wollte. Straße, Hausnummer, PLZ, Ort und Landkürzel lassen sich nicht auslesen -.-
bastla
bastla 17.04.2012, aktualisiert am 18.10.2012 um 18:50:39 Uhr
Goto Top
Hallo snakerl!

Dann vielleicht doch VBS ...

Wie soll's denn danach eigentlich weitergehen?

Grüße
bastla
snakerl
snakerl 17.04.2012 um 13:28:49 Uhr
Goto Top
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 face-smile

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 face-smile
bastla
bastla 17.04.2012 um 17:39:01 Uhr
Goto Top
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
snakerl
snakerl 18.04.2012 um 13:45:47 Uhr
Goto Top
Da ist das Ding, ich hoffe, ich habe alles so weit anonymisiert, wie möglich face-wink
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 face-smile
bastla
bastla 18.04.2012 um 16:44:54 Uhr
Goto Top
Hallo snakerl!

Ein wenig vermisse ich in Deinem Script das Auslesen des AD ... face-wink
Nur so am Rande:
<code">:MAKEDIR
If exist %SIGPATH% goto SAVE_SIG
If exist %APPDATA%\Microsoft mkdir %SIGPATH% && goto SAVE_SIG
mkdir %APPDATA%\Microsoft
mkdir %SIGPATH%

REM ==========================================
REM Fertige Backup der alten Signatur(en) an
REM ==========================================
:SAVE_SIG
If not exist %SIG_BACKUP% mkdir %SIG_BACKUP%
XCOPY /I /T /Y /E %SIGPATH%\* %SIG_BACKUP%\%datum%_%zeit%
XCOPY /I /Y /E %SIGPATH%\* %SIG_BACKUP%\%datum%_%zeit%
RD /Q /S %SIGPATH%

REM ==========================================
REM Erstelle den Ordner "Signatures" und setze
REM den Zeichensatz um, zur korrekten Handhabung
REM der Umlaute
REM ==========================================
:GENERATE
If not exist %SIGPATH% mkdir %SIGPATH%

ließe sich reduzieren auf
:MAKEDIR
REM ==========================================
REM Fertige Backup der alten Signatur(en) an
REM ==========================================
If exist %SIGPATH% xcopy /ey %SIGPATH%\* %SIG_BACKUP%\%datum%_%zeit%\
RD /Q /S %SIGPATH%
md %SIGPATH%
Sowohl "md" als auch "xcopy" erstellen bei Bedarf die gesamte Pfadstruktur ...

Grüße
bastla
snakerl
snakerl 18.04.2012 um 21:01:05 Uhr
Goto Top
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 ;)
bastla
bastla 18.04.2012 um 21:07:20 Uhr
Goto Top
Hallo snakerl!

Eigentlich warte ich ja noch auf die Endfassung ... face-wink

... aber
REM ==========================================
REM Schleife zum Beenden der Outlook.exe
REM ==========================================
:STOP_OUTLOOK
echo.
TaskList /FI "IMAGENAME eq OUTLOOK.EXE" 2>NUL | Find "OUTLOOK.EXE" >NUL  
IF ERRORLEVEL == 1 (
  GOTO START
  ) ELSE (
    GOTO Loop
    )
   
:Loop
echo.
echo.
echo.
echo Der Prozess "OUTLOOK.EXE" ist noch nicht beendet.  
echo Bitte beenden Sie Outlook, bevor Sie fortfahren!
echo.
pause
goto STOP_OUTLOOK
ließe sich zB auch so schreiben:
REM ==========================================
REM Schleife zum Beenden der Outlook.exe
REM ==========================================
:STOP_OUTLOOK
echo.
TaskList /FI "IMAGENAME eq OUTLOOK.EXE" 2>NUL | Find "OUTLOOK.EXE" >NUL || GOTO START  
echo.
echo.
echo.
echo Der Prozess "OUTLOOK.EXE" ist noch nicht beendet.  
echo Bitte beenden Sie Outlook, bevor Sie fortfahren!
echo.
pause
goto STOP_OUTLOOK
- auch, weil es entweder
IF ERRORLEVEL 1
oder
if %ERRORLEVEL%==1
heißen sollte ...

Grüße
bastla
snakerl
snakerl 18.04.2012 um 21:32:14 Uhr
Goto Top
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 ###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?