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



<!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>

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)).

каталог с шаблонами для подписей OutlookСоздадим новый файл 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\<Версия 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

}

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

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

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

  • В том случае, если Outlook отображает htm подпись с большими (двойными) отступами между строками, это баг Outlook Лучше всего создать файл с шаблоном htm подписи непосредственно в  Outlook, и использовать в качестве шаблона именно этот файл (хранится в %APPDATA%\Microsoft\Signatures)
  • В подпись также можно добавить фотографию пользователя из атрибута thumbnailPhoto в Active Directory. Т.к. простого способа добавить изображение в подпись Outlook нет, проще всего, как и в пункте выше создать шаблон подписи с произвольным изображением в Outlook и в PowerShellскрипте копированием заменять файл с изображением в каталоге с шаблоном (изображение хранится в каталоге %AppData%\Microsoft\Signatures\<имя подписи>.files).способ добавить изображение в шаблон подписи outlook
  • В Exchange 2007 и выше простейшую текстовую подпись, автоматически подставляемую во все письма, можно также реализовать с помощью транспортных правил
(Пока оценок нет)
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x