Donnerstag, 22. August 2013

Outlook Signaturen und wie bekämpft man die Anarchie 2/2

Wie bereits im letzten Blogpost als mögliches, bzw. typisches Problem erwähnt, müssen für eine saubere Signatur vollständige Daten im AD enthalten sein.

Dazu kann man entweder auf die Mitarbeiter vertrauen, dass diese sich immer melden, wenn sich etwas ändert oder man beschäft je nach Unternehmensgröße einfach eine Vollzeitstelle damit, welche den ganzen Tag durchs Haus läuft und alle Mitarbeiter "inventarisiert"...natürlich nur ein Spaß.. ;-)

Die, meiner Meinung nach, sinnvollste Lösung ist die kontrollierte Selbstpflege durch die BenutzerInnen selbst, dazu stellt man ihnen ein Tool bereit welches die Daten abfragt und speichert.

Vorteile:
  • weniger Hotlineanrufe
  • BenutzerInnen möchten die Daten selbst ändern, damit z.B. ihre Signatur aktuell ist

Ich habe mich dabei für eine PHP Web-Applikation entschieden, da diese unabhängig vom Computer und vom Server ist, da es PHP für ebenso für Windows gibt.

Im Anwendungsfall habe ich mich für einen netten, kleinen Ubuntu 12.04 LTS Server mit LAP Stack (ja, der heißt normalerweise LAMP, allerdings benötige ich keinen MySQL-Server.. ;-)) entschieden, da ich eine gewissen Open-Source Affinität habe, Lizenzkosten sparen möchte und sehr gute Erfahrung damit gemacht habe.
Dieser authentifiziert die Benutzer mittels Kerberos über den Apache2 am AD (voraussichtlich folgt dazu ein kleines Tutorial im nächsten Post), anschließend übernimmt PHP den Benutzernamen über die Server Variable REMOTE_USER.

Da die Code-Menge dem Leserahmen sprengen würde, gibt es dieses Mal nur einen Direkt-Download als Zip-Archiv: https://dl.dropboxusercontent.com/u/9482545/webapp_signatur.zip

Das Zip-Archiv muss auf das Zielsystem in einen, für den Webserver lesbaren Pfad gepackt werden (je nach Distribution: /var/www, /srv/htdocs, ...).

Features:
  • 1-N Standorte können konfiguriert / vorbereitet werden
  • Schreiben auf den jeweilig konfigurierten, lokalen DC (bei mehreren Standorten, damit nach Neuanmeldung das Signatur Generierungsskript die aktuellen Daten bekommt)
  • Generierung der Adressdaten über die Auswahl des Standorts, auch bei mehreren Standorten pro Stadt
  • Generierung der Fax-/Telefonnummer über die Auswahl des Standorts, es wird nur die Durchwahl eingegeben => einheitliche Formatierung
  • Handynummer wird über Auswahl der Vorwahl+Rufnummer generiert => einheitliche Formatierung
  • Unterstützung für Unterfirmen, abhängig vom Standort (z.B. Wayne Enterprises Hannover, Wayne Business Berlin) => unterschiedliche Einträge in die Firmenfelder
  • Unterstützung von Geschäftsbereichen/Abteilungen und Job-Titeln

Folgende Schritte müssen erfüllt werden, damit das ganze lauffähig wird:
  • Geringe PHP Kenntnisse
  • Fortgeschrittene Linux Kenntnisse (für Kerberos Authentifizierung )
  • Installation Apache2 mit PHP (+ LDAP Module) und Authentifizierung (Zugriff auf REMOTE_USER) z.B. Kerberos oder mod_sspi (nur für Win32 und Apache2 2.0/2.2)
  • Anpassung der Konfiguration in config.inc.php nach eigenem Ermeßen.
  • Anpassung der index.php für CI-Anpassungen

Einen Schönheitsfehler gibt es allerdings noch, die Übertragung wird per Ajax durchgeführt und der Return vom Speichern zurück zur Index.php funktioniert noch nicht perfekt.

Da die Daten im AD nun im Laufe der Zeit aktualisiert werden, kann man aus diesen z.B. genauso leicht eine Telefonliste genieren.


Bei Fragen bitte wie immer einfach melden. ;-)

Outlook Signaturen und wie bekämpft man die Anarchie 1/2

Da es häufiger vorkommt, dass in einem großen Unternehmen BenutzerInnen innerhalb des Unternehmens oder der Standorte umziehen, ändern sich dementsprechend die Benutzerdaten und die Signatur, zu dem sieht jede Signatur irgendwie anders aus.


Mögliche Probleme:
  • Anarchie bei der Signaturerstellung (z.B. Telefonnummernformat, Grußformel, usw.), Corporate Identity soll erreicht werden
  • Aktualität der Daten, siehe dazu meinen nächsten Blogpost => Wie halte ich die AD-Daten aktuell, bzw. lasse es die machen, die wissen sollten wo sie sitzen -> die BenutzerInnen

Damit man diese Signatur nicht bei jeder Person manuell erstellen muss, gibt es verschiedene Möglichkeiten diese zu verteilen.

Folgende Fakten haben wir:
  • Outlook Signatur liegt im Standard in %APPDATA% => C:\Users\%username%\AppData\Roaming\Microsoft\Signatures)
  • Active-Directoy mit aktuellen Daten (dazu komme ich im nächsten Blogpost ;-)) => Größtes Problem
  • Signatur soll weiterhin anpassbar sein oder auch nicht => großer, technischer Unterschied!

Folgende Verteilungsmöglichkeiten sind mir dabei in den Sinn gekommen:

1. Verteilung einer fertigen Signatur

Signatur wird per Skript auf dem NETLOGON Laufwerk erzeugt und per Login-Skript verteilt.
Die Zuweisung würde über die Registry erfolgen:
  •  Zuweisung über den "offiziellen" Weg (KB: 2691977), HKEY_CURRENT_USER\Software\Microsoft\Office\x.0\Common\MailSettings Nachteil: BenutzerInnen können ihre Signatur nicht mehr in Outlook anpassen.
  •  Zuweisung über den inoffiziellen Weg, direkt in das Profil des Benutzers: HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\00000001 ("1" bedeutet Kontonummer, im Unternehmen normalerweise die 1) Vorteil: Benuter können Ihre Signaturen selber setzen, Nachteil: Signaturnamen liegen als Binary Type im Hex Format vor ("00 4D" => "M") und somit etwas komplizierter zu implementieren
Vorteile:klar definierte Signatur, Zuweisung über Login-Skript einfach möglich, da Domänen-Benutzer in HKCU schreiben dürfen
Nachteil: statisch, da aktualisierte Signatur erst verfügbar, wenn der nächste Genierungslauf durch ist


2. Generierung der Signatur über ein VBSkript im Login-Skript.

Die Zuweisung würde hierbei entweder über die Registry Keys oder über die VB Funktionen erfolgen.
Vorteile: lesbarer Code ohne Registry Zugriffe, Generierung der Signatur bei Login
Nachteile: weiteres Skript muss über das Login-Skript aufgerufen werden


Für meinen Anwendungsfall habe ich mich für die zweite Variante entschieden, da diese deutlich einfacher zu warten ist.

Dazu hier der Code für die Signatur-Generierung (Download via Dropbox: https://dl.dropboxusercontent.com/u/9482545/Outlook_signatur.vbs) :


' Objects
Set objSysInfo = CreateObject("ADSystemInfo")
Set WshShell = CreateObject("WScript.Shell")
Set objUser = GetObject("LDAP://" & objSysInfo.UserName)
Set objWord = CreateObject("Word.Application")

' Signature stuff
strName = objUser.givenName + " " + objUser.sn
strDepart = objUser.Department
strDesc = objUser.Description
strStreet = objUser.StreetAddress
strLocation = objUser.l
strPostCode = objUser.PostalCode
strPhone = objUser.TelephoneNumber
strMobile = objUser.Mobile
strFax = objUser.FacsimileTelephoneNumber
strEmail = objUser.mail
strCompany = objUser.Company
aQuote = Chr(34)
aNewLine = Chr(11)

If strCompany = "Dummyhausen" then
 strCompanyTitle = "Foobar company Dummyhausen"
 strCompanyWeb = "http://www.specialpage.de"
Else 
 strCompanyTitle = "Foobar company"
 strCompanyWeb = "http://www.foobar.de"
End If

Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection
Set objEmailOptions = objWord.EmailOptions
Set objSignatureObject = objEmailOptions.EmailSignature
Set objSignatureEntries = objSignatureObject.EmailSignatureEntries

objSelection.Font.Name = "Arial"
objSelection.Font.Size = 10
objSelection.TypeText "Mit freundlichem Gruß"
objSelection.TypeText vbCrLf
if (strCred) Then objSelection.TypeText strCred & strName Else objSelection.TypeText strName
objSelection.TypeText vbCrLf & vbCrLf
' Bold
objSelection.Font.Bold = True
objSelection.TypeText strCompanyTitle + aNewLine
objSelection.TypeText strDepart
objSelection.Font.Bold = False
' not bold
objSelection.TypeText vbCrLf & vbCrLf
if (strCred) Then objSelection.TypeText strCred & strName Else objSelection.TypeText strName
objSelection.TypeText aNewLine
objSelection.TypeText strDesc
objSelection.TypeText vbCrLf
objSelection.TypeText strStreet & aNewLine
objSelection.TypeText strPostCode & " " & strLocation & aNewLine
objSelection.TypeText "Tel: " & strPhone & aNewLine
if (strFax) Then objSelection.TypeText "Fax: " & strFax  & aNewLine
if (strMobile) Then objSelection.TypeText "Mobil: " & strMobile  & aNewLine
objSelection.TypeText vbCrLf
objDoc.Hyperlinks.Add objSelection.Range, "Mailto:" & strEmail, , , strEmail
objSelection.TypeText " | "
objDoc.Hyperlinks.Add objSelection.Range, strCompanyWeb, , ,strCompanyWeb
objSelection.TypeText vbCrLf
objSelection.TypeText "________________________________"
objSelection.TypeText vbCrLf & vbCrLf
objSelection.TypeText "Diese E-Mail enthält vertrauliche und/oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser Mail ist nicht gestattet."
objSelection.TypeText vbCrLf & vbCrLf
objSelection.TypeText "This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is strictly forbidden."
objSelection.TypeText vbCrLf

Set objSelection = objDoc.Range()

' full signature
objSignatureEntries.Add "Full Signature", objSelection
objSignatureObject.NewMessageSignature = "Full Signature"

objDoc.Saved = True

' reply signature
objSignatureEntries.Add "Reply Signature", objSelection
objSignatureObject.ReplyMessageSignature = "Reply Signature"
objDoc.Saved = True
' EOF

Dieses Skript hat keinerlei Ausgaben, sondern verrichtet die Arbeit komplett im Hintergrund, somit werden die BenutzerInnen nicht belästigt, im Beispiel wird die gleiche Signatur für die "Antwort Signatur" genommen, das könnte man noch aufteilen, in dem man eine Kurzsignatur dazu entwirft, mit dem Beispiel sollte man das eigentlich einfach hinbekommen.

Es nutzt die Office VBSkript Bibliotheken und liest die eigenen Benutzerdaten aus dem AD.


Nun muss das Skript nur noch in das Login-Skript eingebaut werden, anschließend werden bei allen PC-Anmeldungen die Signaturen neugeschrieben und aktiviert.


Fazit: Ohne großen Aufwand kann die Corporate Identity durchgesetzt werden.

Download-Link: https://dl.dropboxusercontent.com/u/9482545/Outlook_signatur.vbs


Bei Fragen bitte einfach melden!


Im zweiten Teil wird es um die vereinfachte Aktualisierung der AD BenutzerInnen Daten gehen.