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.

Nun kann ein neues -Skript (.ps1) erstellt werden.

Festlegen der Variablen:

$UserName = $env:USERNAME
$FileName = "signatur"
$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

4 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.