Categories: OutlookPowerShell

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head></head>
<body>
<div id style="font-family:Arial&;color:#5B9BD5;">
<span style="font-size:10pt;color:#000000;">
<b><p>С уважением</p>
<p>@NAME</p> </span>
<span style="font-size:9.0pt;">
<p>&nbsp;</p>
<p>@DESCRIPTION</p>
<p>@COMPANY</p></b>
<p> &nbsp;</p></span>
<span style="font-size:8.0pt;">
<p> @POSTALCODE, @CITY, @STREETADDRESS</p>
<p> тел.@OFFICEPHONE</p>
<p> <a href="http://@WEBSITE">@WEBSITE</a></p>
<p>e-mail:<a href="mailto:@EMAIL">@EMAIL</a></span>
</div>
</body>
</html>

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

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

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

Создадим новый файл 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_USERSoftwareMicrosoftOffice<Версия Office>OutlookSetup
  • В ветке HKEY_CURRENT_USERSoftwareMicrosoftOffice< Версия Office>CommonMailSettings создать два строковых параметра с именами 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
}

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

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

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

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 недели ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 недели ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 недели ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 недели ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 недели ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 недели ago