Stamp Language

VBScript und 64Bit !
Viele 32bit COM-Objekte lassen sich auf einem 64bit System nur instanziieren, wenn die 32bit Version von CSCRIPT/WSCRIPT genutzt wird, welcher unter C:\Windows\SysWOW64\cscript.exe liegt.

Diese Skript nutzt CDO und kann damit nur die Exchange Standardordner umbenennen. Neuere Ordner wie z.B.: Synchronisationsfehler, Entwürfe etc. sind per CDO nicht einfach erreichbar.

Seit Exchange 2010 SP2 ist es direkt per PowerShell möglich die Ordnersprachen im Postfach anzupassen:

set-mailboxregionalconfiguration `
   -identity username@domain.tld `
   -language De-de `
   -Localizedefaultfoldername:$true

Set-MailboxRegionalConfiguration
http://technet.microsoft.com/de-de/library/dd351103.aspx

Als Administrator ist das Leben nicht einfach, besonders wenn sich Benutzer über scheinbare Kleinigkeiten beschweren wie z.B. einer "Inbox" statt eines Posteingangs. Exchange entscheidet nun mal anhand der Sprache des ersten Clientzugriffs über die Postfachordnernamen. Und Zudem verhindern Outlook als auch OWA eine Umbenennung durch den Benutzer. Was aber so trivial scheint, kann ganz schön nervig sein, da es meist mehrere Personen betrifft und einige "Prozessanwendungen" und Makros empfindlich stören kann. Leider nutzen ja nicht alle Entwickler die Funktionen, um die Default-Folder mit einer Konstanten anzusprechen, sondern suchen nach den Namen.

Aber auch ohne solche "Druckmittel" macht es natürlich keinen guten Eindruck, wenn die Ordner nicht in der typischen Landesprache präsentiert werden. Es gibt von Microsoft und Drittherstellern nun gleich mehrere Tools und Programme, um Ordner umzubenennen. Das fängt damit an, einen alten Exchange 5.0 Client zu installieren oder EXMERGE zu verwenden, um die Ordnernamen zu ändern. Dann gibt es jede Menge kompilierte Programme (Teils kostenfrei, teils Shareware oder kommerziell). Fakt ist, dass auch der CDO ein Ordner problemlos umbenannt werden kann.

Outlook XP und höher
Wenn Sie nur ein Postfach mit falschen Ordnernamen haben, dann starten Sie Outlook einfach mit der Option:

Outlook.exe /resetfoldernames

Genau das zeige ich mit dieser Beispielanwendung: Sie starten das Skript in einer CMD-Box mit CSCRIPT unter übergeben einfach den Namen des Servers und den Alias oder die SMTP-Adresse der Mailbox. Basierend auf diesen beiden Werten wird eine Verbindung zum Server per CDO aufgebaut und die Ordner anhand der vordefinierten Systemkonstanten gesucht und der Name geändert, wenn dies erforderlich sein sollte.

Der Code ist absichtlich "einfach" und verständlich gehalten. Es ist natürlich kein Problem, um die innere Funktion eine Schleife für alle Postfächer zu programmieren. Auch werden Ausgaben einfach auf den Bildschirm geschrieben. Auch hier könnte man alle Aktionen ausführlich im Eventlog oder anderer Stelle revisionssicher protokollieren. Man könnte sogar das Skript über einen Eventsink ansteuern, wenn ein neues Postfach falsch angelegt wird. Aber das sind alles optionale Erweiterungen, die von der Hauptfunktion ablenken würden. So ist es einfach ein kleines und leicht verständliches Beispiel, welches für einen angegebenen Benutzer die Ordner ändert.

Leider gibt es in CDO keine Konstanten für die beiden Ordner "Entwürfe" und "Junk-E-Mail", so dass diese nicht ganz so einfach zu erreichen sind. Sicher kann man die erweiterten MAPI-Properties auswerten, die auch Outlook nutzt, aber CDO 1.21 ist eben "vor" der Outlook 2003-Zeit definiert worden. Nicht alle Funktionen von Outlook sind daher auch für CDO erreichbar.

Download und Installation

Wie bei VBScript üblich gibt es keine große Installation. Laden Sie sich das Skript von der Webseite herunter und speichern Sie diese als VBS-Datei auf einem Server, auf dem auch die CDO installiert ist. Das ist auf jedem Exchange 2000/2003 Server per Default der Fall. Bei Exchange 2007 muss man die CDO nachinstallieren oder eben von einem Arbeitsplatz aus die Änderungen ausführen.

StampLanguage.1.1.vbs

Weiterhin muss der ausführende Benutzer natürlich die Berechtigungen haben, alle Postfächer zu öffnen und auch zu ändern. Details hierzu finden Sie auf Mailboxrechte 

Aufruf und Ausgabe

Der Start des Programm stellt sich dann sehr einfach dar.

cscript StampLanguage.1.0.vbs /server:servername /Mailbox:<Alias oder SMTP-Adresse>

Wichtig ist, dass ein gültiger Exchange Server angegeben wird und der Mailboxalias bzw. die SMTP-Adresse eindeutig ist. StampLanguage gibt alle Tätigkeiten auf der Konsole aus. Eine gesonderte Protokollierung in Dateien erfolgt nicht. Auf diesem Bild sehen Sie, dass der Posteingang anscheinend "falsch" benannt war und in diesem Lauf korrigiert wurde.

Ausgabe in CMD-Box

Es ist problemlos, das Programm mehrfach zu starten. Sie sollten in den Folgemeldungen aber dann sehen, dass nichts mehr geändert wird. Wenn Sie mehrere Postfächer auf einen Schwung bearbeiten wollen, können Sie das Skript einfach aus einer CMD-Datei und einer For-Schleife aufrufen. für etwas ambitionierte Administratoren ist es sicher kein Problem, aus Codeteilen von Feiertage sich ein Skript für alle Postfächer zusammen zu kopieren.

Einschränkungen

Das Skript ändert wirklich nur die Namen der Ordner. Es korrigiert nicht die Locale-ID der Mailbox, die für andere Einstellungen maßgeblich ist. Es ändert auch nicht die Sprache, die ein Anwender per OWA angezeigt bekommt. Mit Exchange 2007 gibt es über die PowerShell weitere Optionen, um die Sprachen den Mailbox zu konfigurieren

Set-Mailbox -Identity Username -languages "de-DE"

Details dazu finden Sie Online Hilfe und auf OWA 2010

Offen

Insofern steht für die nächste Version, so ich noch dazu komme, die Erweiterung an, um folgende Dinge gleich mit zu korrigieren:

  • Setzen der Exchange 2007 Sprache im Feld msExchCulture
    Entweder per PowerShell oder durch direkte Änderung im Active Directory
  • Ändern der "Postfachbeschreibung"
    Vermutlich per MAPI
  • Ändern der Local_ID im Postfach
    Mittels der Funktion SetLocaleIDs Method (Session Object)
    http://msdn2.microsoft.com/en-us/library/ms527443.aspx

Weitere Links