В этой статье мы покажем, как автоматически создать подпись пользователя в почтовом клиенте 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> </p>
<p>@DESCRIPTION</p>
<p>@COMPANY</p></b>
<p> </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:\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.
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\<Версия Office>\Outlook\Setup
- В ветке HKEY_CURRENT_USER\Software\Microsoft\Office\< Версия 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 и выше простейшую текстовую подпись, автоматически подставляемую во все письма, можно также реализовать с помощью транспортных правил