Автоматичне створення підпису в Outlook 2010/2013 за допомогою PowerShell

У цій статті ми покажемо, як автоматично створити підпис користувача в поштовому клієнті Outlook 2010/2013 за допомогою PowerShell на основі даних з Active Directory. Завдяки описаною методикою, можна домогтися того, що при першому вході в систему і запуску Outlook у будь-якого нового користувача домену за єдиним шаблоном автоматично створюється підпис з його контактними даними, отриманими з Active Directory.

Природно, для того, щоб такий скрипт працював коректно, потрібно щоб у всіх користувачів в AD були вказані актуальні дані. В даному прикладі в підписі користувача ми будемо використовувати такі атрибути Active Directory:

  • ПІБ користувача російською мовою (в моєму випадку ці дані зберігаються в атрибуті Description),
  • посаду (атрибут Title)
  • найменування компанії (поле Company)
  • поштовий індекс, місто та адресу (PostalCode, City, StreetAddress)
  • телефонний номер (OfficePhone)
  • поштову адресу (Mail)
  • адреса сайту (Homepage)

Нам потрібно створити 3 файли з шаблонами підписів для Outlook в форматах htm (HTML), rtf (Rich Text) і txt (Plain Text). Дизайн, зміст і зовнішній вигляд шаблонів підписів в цих файлах повинен відповідати вимогам до корпоративної поштової підпису.

створимо файл signature.htm з наступним html кодом:







З повагою


@NAME

    


@DESCRIPTION


@COMPANY




@POSTALCODE, @CITY, @STREETADDRESS


тел. @ OFFICEPHONE


@WEBSITE


e-mail: @EMAIL



вміст файлів signature.rtf і signature.txt буде таким:

З повагою,
@NAME
@DESCRIPTION
@COMPANY
@POSTALCODE, @CITY, @STREETADDRESS
Тел. @OFFICEPHONE
e-mail: @EMAIL
site: @WEBSITE

У каталозі C: \Users\Public\Downloads створимо папку OutlookSignature, в якій будуть зберігається шаблони підписів для Outlook і підписи користувачів комп'ютера. Усередині каталогу C: \ Users \ Public \ Downloads \ OutlookSignature створимо підкаталог Templates, в який потрібно скопіювати три файли з шаблонами підписів (це можна зробити вручну або за допомогою переваг групових політик (GPP)).

Створимо новий файл outlooksignature.ps1 з наступним кодом PowerShell (перед кожним блоком коду приведу короткий опис)

Визначимо набір змінних. У змінній $ User міститься ім'я користувача, з-під якого запускається скрипт. В інших змінних пропишемо імена і розширення файлів і шляхи до них.

$ User = $ env: UserName
$ FileName = "signature"
$ FileExtension = "htm", "rtf", "txt"
$ Path = "C: \ Users \ Public \ Downloads"
$ PathSignature = "$ Path \ OutlookSignature"
$ PathSignatureTemplates = "$ Path \ OutlookSignature \ Templates"
$ PathSignatureUser = "$ PathSignature \ $ User"
$ AppSignatures = $ env: APPDATA + "\ Microsoft \ Signatures"

Завантажимо модуль PowerShell для роботи з AD. Потім за допомогою командлета Get-ADUser отримаємо значення цікавлять нас атрибутів користувача в Active Directory і збережемо їх в об'єкті $ AD_user.

Примітка. Для роботи командлет Get-ADUser в Windows 7 на ПК повинен бути встановлений RSAT, і включений компонент  Active Directory Module For Windows PowerShell (Control Panel -> Programs and Features -> Turn On / Off Windows Features -> Remote Server Administration Tools -> Role Administration Tools -> AD DS And AD LDS Tools)

Import-module activedirectory
$ AD_user = Get-ADUser $ User -Properties Title, Company, Description, Fax, HomePage, Mail, OfficePhone, PostalCode, City, StreetAddress

Створимо каталог для зберігання файлів підписів користувача і скопіюємо в нього файли шаблонів:

New-Item -Path "$ PathSignature \ $ User" -ItemType Container -Force
foreach ($ Ext in $ FileExtension)

Copy-Item -Force "$ PathSignatureTemplates \ $ FileName. $ Ext" "$ PathSignatureUser \ $ FileName. $ Ext"

Потім за допомогою функції replace замінимо дані в шаблонах на дані користувача з AD:

foreach ($ Ext in $ FileExtension)

(Get-Content "$ PathSignatureUser \ $ FileName. $ Ext") | Foreach-Object
$ _ '
-replace "@NAME", $ AD_user.Description '
-replace "@DESCRIPTION", $ AD_user.title '
-replace "@COMPANY", $ AD_user.Company '
-replace "@STREETADDRESS", $ AD_user.StreetAddress '
-replace "@POSTALCODE", $ AD_user.PostalCode '
-replace "@CITY", $ AD_user.City '
-replace "@OFFICEPHONE", $ AD_user.OfficePhone '
-replace "@EMAIL", $ AD_user.Mail '
-replace "@WEBSITE", $ AD_user.Homepage '
| Set-Content "$ PathSignatureUser \ $ FileName. $ Ext"

Залишилося скопіювати файли з шаблонами підписів в каталог, в якому Outlook 2010/2013/2016 зберігає підпису % APPDATA% \ Microsoft \ Signatures (C: \ Users \ username \ AppData \ Roaming \ Microsoft \ Signatures).

foreach ($ Ext in $ FileExtension)

Copy-Item -Force "$ PathSignatureUser \ $ FileName. $ Ext" "$ AppSignatures \ $ User. $ Ext"
write-host "$ PathSignatureUser \ $ FileName. $ Ext"
write-host "$ AppSignatures \ $ User. $ Ext"

Щоб при запуску Outlook використовував створені файли з шаблонами підписів, потрібно

  • видалити параметр First-Run в гілці HKEY_CURRENT_USER \ Software \ Microsoft \ Office \\ Outlook \ Setup
  • У гілці HKEY_CURRENT_USER \ Software \ Microsoft \ Office \\ Common \ MailSettings створити два строкових параметра з іменами NewSignature і ReplySignature, в яких буде міститися ім'я шаблону з підписом (у нашому прикладі ім'я шаблону відповідає імені облікового запису в AD)

Відповідно, для роботи з різними версіями MS Office потрібно додати такий код:

#Office 2010
If (Test-Path HKCU: '\ Software \ Microsoft \ Office \ 14.0')
Remove-ItemProperty -Path HKCU: \ Software \ Microsoft \ Office \ 14.0 \ Outlook \ Setup -Name First-Run -Force -ErrorAction SilentlyContinue -Verbose
New-ItemProperty HKCU: '\ Software \ Microsoft \ Office \ 14.0 \ Common \ MailSettings' -Name 'ReplySignature' -Value $ User -PropertyType 'String' -Force
New-ItemProperty HKCU: '\ Software \ Microsoft \ Office \ 14.0 \ Common \ MailSettings' -Name 'NewSignature' -Value $ User -PropertyType 'String' -Force

#Office 2013
If (Test-Path HKCU: '\ Software \ Microsoft \ Office \ 15.0')
Remove-ItemProperty -Path HKCU: \ Software \ Microsoft \ Office \ 15.0 \ Outlook \ Setup -Name First-Run -Force -ErrorAction SilentlyContinue -Verbose
New-ItemProperty HKCU: '\ Software \ Microsoft \ Office \ 15.0 \ Common \ MailSettings' -Name 'ReplySignature' -Value $ User -PropertyType 'String' -Force
New-ItemProperty HKCU: '\ Software \ Microsoft \ Office \ 15.0 \ Common \ MailSettings' -Name 'NewSignature' -Value $ User -PropertyType 'String' -Force

Залишилося призначити даний PowerShell скрипт на одноразовий запуск за допомогою Group Policy Preferences при вході користувача в систему. В результаті при запуску Outlook автоматично буде використовувати сформовану електронний підпис для листів, що відправляються (на першому малюнку статті наведено приклад такої автоматично сформованої підпису).

Декілька порад.

  • У тому випадку, якщо Outlook відображає htm підпис з великими (подвійними) відступами між рядками, це баг Outlook Найкраще створити файл із шаблоном htm підписи безпосередньо в Outlook, і використовувати в якості шаблону саме цей файл (зберігається в% APPDATA% \ Microsoft \ Signatures)
  • В підпис також можна додати фотографію користувача з атрибута thumbnailPhoto в Active Directory. Оскільки простого способу додати зображення в підпис Outlook немає, найпростіше, як і в пункті вище створити шаблон підпису з довільним зображенням в Outlook і в PowerShellскріпте копіюванням замінювати файл із зображенням в каталозі з шаблоном (зображення зберігається в каталозі % AppData% \ Microsoft \ Signatures \ .files).
  • В Exchange 2007 і вище найпростішу текстову підпис, автоматично підставляється в листи, можна також реалізувати за допомогою транспортних правил