Автоматическое создание подписи в Outlook 2010/2013 с помощью PowerShell

Автоматическое создание подписи в 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)

Подпись в Outlook 2010 2013 с помощью powershell

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

Создадим файл signature.htm со следующим html кодом:


С уважением

@NAME


 

@DESCRIPTION

@COMPANY

 


@POSTALCODE, @CITY, @STREETADDRESS

тел.@OFFICEPHONE

@WEBSITE

e-mail:@EMAIL

html шаблон подписиСодержимое файлов signature.rtf и signature.txt будет таким:

С уважением,
@NAME
@DESCRIPTION
@COMPANY
@POSTALCODE, @CITY, @STREETADDRESS
Тел. @OFFICEPHONE
e-mail:@EMAIL
site:@WEBSITE


В каталоге C:UsersPublicDownloads создадим папку OutlookSignature, в которой будут хранится шаблоны подписей для Outlook и подписи пользователей компьютера. Внутри каталога C:UsersPublicDownloadsOutlookSignature создадим подкаталог Templates, в который нужно скопировать три файла с шаблонами подписей (это можно сделать вручную или с помощью предпочтений групповых политик (GPP)).

каталог с шаблонами для подписей OutlookСоздадим новый файл outlooksignature.ps1 со следующим кодом PowerShell (перед каждым блоком кода приведу краткое описание)

Определим набор переменных. В переменной $User содержится имя пользователя, из-под которого запускается скрипт. В остальных переменных пропишем имена и расширения файлов и пути к ним.

$User = $env:UserName
$FileName = "signature"
$FileExtension = "htm","rtf","txt"
$Path = "C:UsersPublicDownloads"
$PathSignature = "$PathOutlookSignature"
$PathSignatureTemplates = "$PathOutlookSignatureTemplates"
$PathSignatureUser = "$PathSignature$User"
$AppSignatures =$env:APPDATA + "MicrosoftSignatures"

Загрузим модуль 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%MicrosoftSignatures (C:UsersusernameAppDataRoamingMicrosoftSignatures).

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_USERSoftwareMicrosoftOfficeOutlookSetup
  • В ветке HKEY_CURRENT_USERSoftwareMicrosoftOfficeCommonMailSettings создать два строковых параметра с именами NewSignature и ReplySignature, в которых будет содержаться имя шаблона с подписью (в нашем примере имя шаблона соответствует имени учётной записи в AD)

Соответственно, для работы с разными версиями MS Office нужно добавить такой код:

#Office 2010
If (Test-Path HKCU:'SoftwareMicrosoftOffice14.0') {
Remove-ItemProperty -Path HKCU:SoftwareMicrosoftOffice14.0OutlookSetup -Name First-Run -Force -ErrorAction SilentlyContinue -Verbose
New-ItemProperty HKCU:'SoftwareMicrosoftOffice14.0CommonMailSettings' -Name 'ReplySignature' -Value $User -PropertyType 'String' -Force
New-ItemProperty HKCU:'SoftwareMicrosoftOffice14.0CommonMailSettings' -Name 'NewSignature' -Value $User -PropertyType 'String' -Force
}
#Office 2013
If (Test-Path HKCU:'SoftwareMicrosoftOffice15.0') {
Remove-ItemProperty -Path HKCU:SoftwareMicrosoftOffice15.0OutlookSetup -Name First-Run -Force -ErrorAction SilentlyContinue -Verbose
New-ItemProperty HKCU:'SoftwareMicrosoftOffice15.0CommonMailSettings' -Name 'ReplySignature' -Value $User -PropertyType 'String' -Force
New-ItemProperty HKCU:'SoftwareMicrosoftOffice15.0CommonMailSettings' -Name 'NewSignature' -Value $User -PropertyType 'String' -Force
}

Скрипт для автоматического формирования подписи в Outlook с помощью powershell

Осталось назначить данный PowerShell скрипт на однократный запуск с помощью Group Policy Preferences при входе пользователя в систему. В результате при запуске Outlook автоматически будет использовать сформированную электронную подпись для отправляемых писем (на первом рисунке статьи приведен пример такой автоматически сформированной подписи).

Несколько советов.

  • В том случае, если Outlook отображает htm подпись с большими (двойными) отступами между строками, это баг Outlook Лучше всего создать файл с шаблоном htm подписи непосредственно в Outlook, и использовать в качестве шаблона именно этот файл (хранится в %APPDATA%MicrosoftSignatures)
  • В подпись также можно добавить фотографию пользователя из атрибута thumbnailPhoto в Active Directory. Т.к. простого способа добавить изображение в подпись Outlook нет, проще всего, как и в пункте выше создать шаблон подписи с произвольным изображением в Outlook и в PowerShellскрипте копированием заменять файл с изображением в каталоге с шаблоном (изображение хранится в каталоге %AppData%MicrosoftSignatures.files).способ добавить изображение в шаблон подписи outlook
  • В Exchange 2007 и выше простейшую текстовую подпись, автоматически подставляемую во все письма, можно также реализовать с помощью транспортных правил

PowerShell
Автоматическое создание подписи в Outlook 2010/2013 с помощью PowerShell