Outlook Signatur PowerShell Active-Directory

In diesem geht es um die Erstellung einer Microsoft  Signatur mittels PowerShell aus dem Active-Directory (AD). Zuerst müssen die erforderlichen Template-Dateien (htm, txt) erstellt werden.

Das Layout der beispielhaften Template-Dateien sollte sich am Corporate Design orientieren, und deshalb angepasst werden. Das HowTo ist sehr einfach gehalten, und man kann es deshalb selbst weiterentwickeln bzw. ausbauen.

Die Template-Dateien sollten nun im Deployment-Verzeichnis (Beispiel) hinterlegt werden, welche als Variable $PathSignaturTemplates angegeben wird.

Seit Oktober 2002 mit der Aktivierung von gesyncten M365-Signaturen muss im Signaturdateinamen der Name der Outlook .ost Datei unter „%LocalAppData%\Microsoft\Outlook“ vorhanden sein, damit die Standardsignatur für neue Nachrichten oder Antworten/Weiterleitungen gesetzt werden kann. Beispiel für Signaturdateinamen:

  • „Signatur (beispiel@dertechblog.de).htm“
  • „Signatur (beispiel@dertechblog.de).txt“

Nun kann ein neues -Skript (.ps1) erstellt werden. Auslesen des .ost Dateinamen und festlegen der Variablen:

$UserName = $env:USERNAME
$OstName = (Get-ChildItem -Path "$env:LOCALAPPDATA\Microsoft\Outlook\*.ost").Basename
$FileName = "Signatur ($OstName)"
$FileExtension = "htm", "txt"
$PathSignaturTemplates = "\\example.com\deploy\signaturtemplates"
$PathSignaturUser = "$env:APPDATA\Microsoft\Signatures"

Auslesen Möglichkeit 1 (Get-ADUser):

Wird diese Möglichkeit in Betracht gezogen, sollten die PowerShell-AD-Cmdlets vorab an einem Client administrativ installiert bzw. verteilt werden:

Get-WindowsCapability -Online | Where-Object { $_.Name -match "Rsat.ActiveDirectory" -and $_.State -eq "NotPresent" } | Add-WindowsCapability -Online

Auslesen der Active Directory attribute mit vorhandenen PowerShell-AD-Cmdlets mit Get-ADUser und Übergabe in eine Variable:

$Table = Get-ADUser $UserName -Properties City, Company, Description, Fax, HomePage, Mail, OfficePhone, PostalCode, StreetAddress

Auslesen Möglichkeit 2 (DirectorySearcher):

Auslesen der IADsUser property ohne vorhandenen PowerShell-AD-Cmdlets mit DirectorySearcher und Übergabe in eine Variable:

$Table = (New-Object System.DirectoryServices.DirectorySearcher "sAMAccountName=$UserName").FindOne().Properties

Hinweis: Wird DirectorySearcher verwendet, müssen die Active Directory attribute entsprechend an die IADsUser property angepasst werden. Eine Vergleichstabelle ist bei Mapping Between IADsUser Properties and Active Directory Attributes – Win32 apps | Microsoft Docs zu finden.

Template-Dateien in Benutzer-Verzeichnis für Signatur-Dateien kopieren:

foreach ($Ext in $FileExtension) {
    Copy-Item -Force "$PathSignaturTemplates\$FileName.$Ext" "$PathSignaturUser\$FileName.$Ext"
}

Ersetzen Möglichkeit 1 (Get-ADUser):

Mit dem -replace Parameter werden die zuvor ausgelesenen Active Directory attribute in den Signatur-Dateien eingefügt bzw. ersetzt:

foreach ($Ext in $FileExtension) {
    (Get-Content -Path "$PathSignaturUser\$FileName.$Ext") |
    ForEach-Object { $_ -replace "@CITY", $Table.City } |
    ForEach-Object { $_ -replace "@COMPANY", $Table.Company } |
    ForEach-Object { $_ -replace "@DESCRIPTION", $Table.Description } |
    ForEach-Object { $_ -replace "@EMAIL", $Table.Mail } |
    ForEach-Object { $_ -replace "@FAX", $Table.Fax } |
    ForEach-Object { $_ -replace "@NAME", $Table.Name } |
    ForEach-Object { $_ -replace "@OFFICEPHONE", $Table.OfficePhone } |
    ForEach-Object { $_ -replace "@POSTALCODE", $Table.PostalCode } |
    ForEach-Object { $_ -replace "@STREETADDRESS", $Table.StreetAddress } |
    ForEach-Object { $_ -replace "@WEBSITE", $Table.Homepage } |
    Set-Content -Force -Path "$PathSignaturUser\$FileName.$Ext"
}

Ersetzen Möglichkeit 2 (DirectorySearcher):

Mit dem -replace Parameter werden die zuvor ausgelesenen IADsUser property in den Signatur-Dateien eingefügt bzw. ersetzt:

foreach ($Ext in $FileExtension) {
    (Get-Content -Path "$PathSignaturUser\$FileName.$Ext") |
    ForEach-Object { $_ -replace "@CITY", $Table.l } |
    ForEach-Object { $_ -replace "@COMPANY", $Table.company } |
    ForEach-Object { $_ -replace "@DESCRIPTION", $Table.description } |
    ForEach-Object { $_ -replace "@EMAIL", $Table.mail } |
    ForEach-Object { $_ -replace "@FAX", $Table.facsimiletelephonenumber } |
    ForEach-Object { $_ -replace "@NAME", $Table.name } |
    ForEach-Object { $_ -replace "@OFFICEPHONE", $Table.telephonenumber } |
    ForEach-Object { $_ -replace "@POSTALCODE", $Table.postalcode } |
    ForEach-Object { $_ -replace "@STREETADDRESS", $Table.streetaddress } |
    ForEach-Object { $_ -replace "@WEBSITE", $Table.wWWHomePage } |
    Set-Content -Force -Path "$PathSignaturUser\$FileName.$Ext"
}

Werden eckige Klammern (square brackets) bei -replace verwendet, muss ein Backslash am Anfang gesetzt werden.

Beide Möglichleiten Get-ADUser und DirectorySearcher können im Userkontext ohne administrative AD-Berechtigungen verwendet werden.

Empfehlenswert ist die Ausführung des PowerShell-Skripts bei Anmeldung des Benutzers.

Photo by Museums Victoria on Unsplash

Unterstütze uns mit PayPal

Als werbefreie Website freuen wir uns über jede Unterstützung durch euch. Spende deinen individuellen Beitrag bei PayPal an uns.

Neueste Beiträge

Neueste Kommentare

10 Kommentare

  1. Andreas B
    11. März 2020 09:57

    Hallo,

    vielen Dank für diese Anleitung, wenn ich allerdings nur
    $Table = (New-Object System.DirectoryServices.DirectorySearcher „sAMAccountName=$UserName“).FindOne().Properties
    nutze, werden in meiner Signatur nur der Name, Abteilung, Position, Mobilnummer.
    Die Felder @telephoneNumber, @Fax, @GivenName, @StreetAddress, @PostalCode @City, @wWWHomePage werden leider nicht gefüllt. Wenn ich aber nur $Table = Get-ADUser $UserName -Properties givenName, sn, title, department, City, mobile, Description, Fax, wWWHomePage, Mail, telephoneNumber, PostalCode, StreetAddress eingebe funktioniert es.

    Ich hoffe Sie können mir helfen.

  2. David R.
    10. August 2022 07:55

    Hallo,
    müssen alle User zur Ausführung des Scripts bei sich lokal auf dem PC das „ActiveDirectory“-Module installiert/aktiviert haben?
    Oder wo und mich welchem Rechtekontext wird der „Get-ADUser“-Befehl dann ausgeführt?

  3. 10. August 2022 10:53

    Hallo David, du kannst mit administrativ installierten Rsat.ActiveDirectory Tools das Skript ausführen, oder als zweite Möglichkeit ohne die AD-Module mit DirectorySearcher. Get-ADUser und DirectorySearcher kann im Userkontext ohne administrative AD-Berechtigungen verwendet werden. Ich habe den Beitrag entsprechend aktualisiert.

  4. Ulf K
    04. Januar 2023 15:09

    Hallo,
    leider funktioniert es seit einigen Office 365 Updates nicht mehr, da der Dateinamen im Signatur Verzeichnis die E-Mail Adresse in bestimmter Schreibweise erwartet.
    Signatur (Vorname.Nachname@Firma.com)
    Manchmal muss der Namens-Anfangsbuchstabe groß und manchmal klein geschrieben sein. Wo man das auslesen kann, ist mir ein Rätsel. habe die Registry auf mehreren Rechnern verglichen und Niemelas eine Übereinstimmung entdeckt.
    Über eine Hilfe oder Tipp würde ich mich wirklich freuen, da ich schon seit Stunden im Dunkeln tappe 🙁

  5. 04. Januar 2023 15:28

    Hallo Ulf K, vielen Dank für dein Kommentar. Mein Beitrag geht nicht explizit auf den Dateinamen ein, dieser kann individuell vergeben werden. Unter Outlook-Desktop mit Aktivierung von gesyncten M365-Signaturen (seit Oktober 2022), kann die Signatur vom User unter „Signaturen von diesem Gerät“ ausgewählt werden.

  6. Ulf K
    09. Januar 2023 08:03

    Hallo,
    danke für deine Antwort.
    Ja kann ich auswählen, allerdings nicht als Standardsignatur für neue oder Antworten festlegen, also völlig nutzlos.
    Habe es inzwischen aufgegeben und die Mitarbeiter müssen sich ihre Signatur selber einrichten.
    Gruß Ulf

  7. 09. Januar 2023 10:49

    Hallo Ulf K, vielen Dank für dein weiteres Kommentar. Im Signaturdateinamen muss der Name der Datei „%LocalAppData%\Microsoft\Outlook\beispiel@dertechblog.de.ost“ stehen, dann kann die Signatur als Standardsignatur für neue Nachrichten oder Antworten/Weiterleitungen gesetzt werden.
    Beispiele:
    „Signatur (beispiel@dertechblog.de).htm“
    „Signatur (beispiel@dertechblog.de).txt“
    Mit (Get-ChildItem *.ost).Basename kann der Name im Skript verwendet werden.
    Ich habe den Artikel entsprechend angepasst.

  8. Ulf K
    09. Januar 2023 18:12

    Hallo Johannes,
    es wäre so schön gewesen aber leider funktioniert das auch nicht, da Microsoft in diesen Fall zwischen Groß und Kleinschreibung unterscheidet.
    In der Ost Datei ist mein Name großgeschrieben und meine Signatur ist kleingeschrieben.
    Es muss doch irgendwie möglich sein, herauszufinden welche E-Mail Adresse er in dem Signatur Dateinamen erwartet, mit welcher Domain und ob groß oder kleingeschrieben.

  9. 09. Januar 2023 19:05

    Hallo Ulf K, E-Mail-Adresse für die Signatur ist der Outlook Kontoname. Im Normalfall ist dies der Basename der .ost Datei. Hierzu gibt es seitens Microsoft noch keine Dokumentation.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert