Windows

Powershell Outlook Signature Local AD

Et logonscript, der bygger Outlook-signaturen ud fra brugerens egne oplysninger i det lokale Active Directory. Hele scriptet står i indlægget, klar til at tilpasse.

<#
.SYNOPSIS
    Generate Outlook Signature with data from Local AD
.DESCRIPTION
    This script generates Outlook signatures automatically using Active Directory data.
    It should be run as a logon script. For testing purposes, you can run it with initials.
.NOTES
    Author: Kasper Lundgaard Christensen - TODO-IT
    Date: 01-04-2024
    Version: 1.0
#>

# Parameters
param(
    [string]$UserOverwrite
)

# Getting Active Directory information for current user
$user = (([adsisearcher]"(&(objectCategory=User)(samaccountname=$env:username))").FindOne().Properties)

# Overwrite user for testing purposes
if ($UserOverwrite) {
    $user = (([adsisearcher]"(&(objectCategory=User)(samaccountname=$UserOverwrite))").FindOne().Properties)
    Write-Host "Testing with user: $UserOverwrite"
}

# If the user is not found in Active Directory exit the script
if (!$user) {
    Write-Error "User not found in Active Directory"
    exit 1
}

# Signature configuration
$folderLocation = $Env:APPDATA + '\Microsoft\Signatures'
$filename = "AD Signature"
$file = "$folderLocation\$filename"

# Company information
$companyName = "Company Name"
$logo = "Logo link"
$logoURL = "Logo URL"
$companyPhone = "Phone Number"
$slogan_1 = "Slogan"
$considerPrint = "Please consider the environment before printing this email"

# Create signatures folder if it doesn't exist
if (!(Test-Path -Path $folderLocation)) {
    New-Item -ItemType Directory -Path $folderLocation -Force
}

# Get user properties from Active Directory
$userProperties = @{
    DisplayName  = if ($user.name.Count -gt 0) { $user.name[0] } else { $null }
    JobTitle     = if ($user.title.Count -gt 0) { $user.title[0] } else { $null }
    Email        = if ($user.mail.Count -gt 0) { $user.mail[0] } else { $null }
    Company      = if ($user.company.Count -gt 0) { $user.company[0] } else { $null }
    Mobile       = if ($user.mobile.Count -gt 0) { $user.mobile[0] } else { $null }
    DirectDial   = if ($user.homephone.Count -gt 0) { $user.homephone[0] } else { $null }
    Telephone    = if ($user.telephonenumber.Count -gt 0) { $user.telephonenumber[0] } else { $null }
    Website      = if ($user.wwwhomepage.Count -gt 0) { $user.wwwhomepage[0] } else { $null }
    PoBox        = if ($user.postofficebox.Count -gt 0) { $user.postofficebox[0] } else { $null }
    Office       = if ($user.physicaldeliveryofficename.Count -gt 0) { $user.physicaldeliveryofficename[0] } else { $null }
    Street       = if ($user.streetaddress.Count -gt 0) { $user.streetaddress[0] } else { $null }
    City         = if ($user.l.Count -gt 0) { $user.l[0] } else { $null }
    State        = if ($user.st.Count -gt 0) { $user.st[0] } else { $null }
    ZipCode      = if ($user.postalcode.Count -gt 0) { $user.postalcode[0] } else { $null }
}

# Group Check for custom logo
$Group = [ADSI]"LDAP://CN=Signature_CompanyLogo,OU=Signature,OU=Security Groups,OU=Users,DC=contoso,DC=dk"
$Group.Member | ForEach-Object {
    if ($user.distinguishedname -match $_) {
        $logo = "Alternative Logo Link"
    }
}

# CSS Styles
$style = @"
<style>
    p, table, td, tr, a, span {
        font-family: Calibri, Helvetica, sans-serif;
        font-size: 11pt;
        color: #000000;
    }

    span.blue {
        color: #000000;
    }

    table {
        margin: 0;
        padding: 0;
    }

    a {
        text-decoration: none;
    }

    hr {
        border: none;
        height: 1px;
        background-color: #000000;
        color: #000000;
        width: 700px;
    }

    .Contact {
        width: 150px;
    }

    table.main {
        /* Main table styles */
    }
</style>
"@

# HTML Signature
$htmlSignature = @"
<span>Med venlig hilsen/Kind regards/Mit freundlichen Grüssen</span><br />
$(if ($userProperties.DisplayName) { "<span><b>$($userProperties.DisplayName)</b></span><br />" })
$(if ($userProperties.JobTitle) { "<span>$($userProperties.JobTitle)</span><br /><br />" })

<p>
<table class='main'>
    <tr>
        <td colspan='2' style='padding-right: 75px;'>
            $(if ($logo) { "<a href='$logoURL'><img src='$logo' /></a>" })
        </td>
    </tr>
    <tr>
        <table>
            $(if ($userProperties.Telephone) { "<tr><td class='Contact'>Hovednummer: </td><td><a href='tel:$companyPhone'>$companyPhone</a></td></tr>" })
            $(if ($userProperties.Mobile) { "<tr><td class='Contact'>Mobil: </td><td><a href='tel:+45 $($userProperties.Mobile)'>+45 $($userProperties.Mobile)</a></td></tr>" })
            $(if ($userProperties.Email) { "<tr><td class='Contact'>Email: </td><td><a href='mailto:$($userProperties.Email)'>$($userProperties.Email)</a></td></tr>" })
            $(if ($userProperties.Website) { "<tr><td class='Contact'>Website: </td><td><a href='https://$($userProperties.Website)'>$($userProperties.Website)</a></td></tr>" })
        </table>
        <table>
            <tr>
                <br/>
                <br/>
                <br/>
            </tr>
            <tr>
                <td colspan='2' style='padding-bottom: 10px;'>
                    $(if ($companyName) { "<b>$companyName</b><br/>" })
                    $(if ($userProperties.Street) { "$($userProperties.Street)<br/>" })
                    $(if ($userProperties.ZipCode) { "$($userProperties.ZipCode) " })
                    $(if ($userProperties.City) { $userProperties.City })
                </td>
            </tr>
            <tr>
                <td colspan='2'>
                    <p>$slogan_1</p>
                </td>
            </tr>
        </table>
    </tr>
</table>
</p>
<br />
"@

# Save HTML signature
$style + $htmlSignature | Out-File "$file.htm" -Encoding UTF8

# Text signature for plain text emails
$textSignature = @"
Med venlig hilsen/Kind regards/Mit freundlichen Grüssen
$(if ($userProperties.DisplayName) { $userProperties.DisplayName })
$(if ($userProperties.JobTitle) { $userProperties.JobTitle })

$(if ($userProperties.Telephone) { "Hovednummer: $companyPhone" })
$(if ($userProperties.Mobile) { "Mobil: +45 $($userProperties.Mobile)" })
$(if ($userProperties.Email) { "Email: $($userProperties.Email)" })

$(if ($companyName) { $companyName })
$(if ($userProperties.Street) { $userProperties.Street })
$(if ($userProperties.ZipCode) { $userProperties.ZipCode }) $(if ($userProperties.City) { $userProperties.City })
"@

# Save text signature
$textSignature | Out-File "$file.txt" -Encoding Default

# Configure Outlook signatures in registry
$outlookVersions = @(
    @{ Version = "16.0"; Path = "HKCU:\Software\Microsoft\Office\16.0" },
    @{ Version = "14.0"; Path = "HKCU:\Software\Microsoft\Office\14.0" }
)

foreach ($outlook in $outlookVersions) {
    $commonPath = $outlook.Path + "\Common"
  
    if (Test-Path $commonPath) {
        # Set signature path
        if (Test-Path "$commonPath\General") {
            Set-ItemProperty -Path "$commonPath\General" -Name "Signatures" -Value "Signatures" -Force
        }
  
        # Set default signatures
        if (Test-Path "$commonPath\MailSettings") {
            Set-ItemProperty -Path "$commonPath\MailSettings" -Name "NewSignature" -Value $filename -Force
            Set-ItemProperty -Path "$commonPath\MailSettings" -Name "ReplySignature" -Value $filename -Force
        }
  
        # Remove First-Run flag
        $setupPath = $outlook.Path + "\Outlook\Setup"
        if (Test-Path $setupPath) {
            Remove-ItemProperty -Path $setupPath -Name "First-Run" -ErrorAction SilentlyContinue
        }
    }
}

Write-Host "Signature generated successfully for $($userProperties.DisplayName)"

Brugsanvisning:

Normal brug (som logonscript):

  • Deploy scriptet som logonscript via Group Policy

Test kørsel:

.\Script.ps1 -UserOverwrite "Initialer"

Funktioner:

  • Henter brugerinformation automatisk fra Active Directory
  • Genererer både HTML og tekst-version af signaturen
  • Understøtter flere Outlook-versioner (2010, 2016, Office365)
  • Mulighed for at teste med specifikke brugere
  • Dynamisk logo baseret på AD-gruppemedlemskab
  • Automatisk opsætning af Outlook-signatur

Bemærk: Husk at tilpasse AD-stier, company information og logo-stier til din organisation før brug.

Udgivet 4. december 2024 · opdateret 23. september 2026

Tilbage til bloggen

Ring Skriv til os
An unhandled error has occurred. Reload 🗙

Cookiepolitik

Sidst opdateret 5. september 2026

Hvad er cookies?

Cookies er små tekstfiler, som gemmes på din computer, tablet eller mobiltelefon, når du besøger et website. En cookie indeholder typisk websitets navn, cookiens levetid og en værdi (normalt et tilfældigt genereret unikt nummer).

Hvorfor bruger vi cookies?

TODO•IT bruger cookies til at få websitet til at fungere, til at se hvilke sider der bliver læst, til vores chat og til at måle vores markedsføring. Alt ud over det nødvendige sker kun, hvis du siger ja til det.

Hvilke cookies bruger vi?

Du bestemmer selv, hvad vi må sætte ud over det nødvendige. Dit valg gemmer vi i en cookie, og du kan altid ændre det igen nederst på siden under «Samtykkeindstillinger».

Nødvendige cookies

Disse er der altid. De kan ikke slås fra, fordi siden ikke virker uden dem.

  • todoit-samtykke: husker hvad du har sagt ja og nej til, så vi ikke spørger igen ved hvert besøg. Udløber efter 180 dage.
  • Sikkerhedscookie: beskytter formularer mod misbrug fra andre websites (CSRF). Slettes når du lukker browseren.
  • Blazor-sessionen: holder styr på forbindelsen mellem din browser og vores server, mens du er på siden.

Statistik — kun hvis du siger ja

Vi bruger Google Analytics til at se, hvilke sider der bliver læst, og hvor folk kommer fra. Vi bruger det til at skrive bedre indhold — ikke til at genkende dig personligt.

  • Cookies: _ga, _ga_*, _gid, _gat
  • Leverandør: Google Ireland Limited
  • Levetid: op til 2 år

Support og chat — kun hvis du siger ja

Chatvinduet i nederste hjørne leveres af Tawk.to. Uden samtykke bliver det slet ikke indlæst, og så kan du i stedet skrive eller ringe til os.

  • Cookies: __tawkuuid, TawkConnectionTime m.fl.
  • Leverandør: tawk.to inc.

Anmeldelser — kun hvis du siger ja

Vi viser vores anmeldelser fra Trustpilot. Widgetten hentes fra Trustpilot og kan sætte cookies fra trustpilot.com.

  • Leverandør: Trustpilot A/S

Markedsføring — kun hvis du siger ja

LinkedIn Insight Tag måler, hvilke af vores annoncer på LinkedIn der fører til besøg, og registrerer hvis du sender os en besked gennem kontaktformularen. Denne tjeneste følger dig også på tværs af andre websites — derfor er den sit eget punkt, som du kan sige nej til for sig.

  • Cookies: li_sugr, li_gc, lidc, bcookie, bscookie, UserMatchHistory, AnalyticsSyncHistory, ln_or
  • Leverandør: LinkedIn Ireland Unlimited Company

Hvad vi ikke gør

Vi henter ikke skrifttyper, ikoner eller andet fra tredjeparts servere. Alt hvad siden består af, leveres fra vores egen server inden for EU. Siger du nej til det hele ovenfor, går der ingen oplysninger om dig til nogen anden end os og vores hostingleverandør — samt Cloudflare, som leverer siden ud til dig og derfor ser din forespørgsel på vej ind.

Hvordan ændrer du dit valg?

Klik på Samtykkeindstillinger nederst på enhver side. Du kan slå de enkelte tjenester til og fra, og valget gælder fra det øjeblik du gemmer det.

Hvordan administrerer du cookies?

Du kan til enhver tid slette cookies fra din browser eller indstille din browser til at afvise cookies. Bemærk dog, at hvis du slår cookies fra, kan visse funktioner på websitet muligvis ikke fungere korrekt.

Sådan sletter du cookies:

  • Chrome: Indstillinger → Privatliv og sikkerhed → Cookies og andre webstedsdata
  • Firefox: Indstillinger → Privatliv og sikkerhed → Cookies og webstedsdata
  • Edge: Indstillinger → Cookies og webstedstilladelser → Administrer og slet cookies
  • Safari: Indstillinger → Privatliv → Administrer webstedsdata

Kontakt

Har du spørgsmål til vores brug af cookies, er du velkommen til at kontakte os:

Todo-IT ApS
Email: support@todo-it.dk
Telefon: +45 22 78 27 20
CVR: 46406664