У цій статті ми покажемо, як автоматично створити підпис користувача в поштовому клієнті 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 і вище найпростішу текстову підпис, автоматично підставляється в листи, можна також реалізувати за допомогою транспортних правил