Автоматическое создание подписи в outlook из ad

Обновлено: 04.07.2024

В корпоративной среде перед системным администратором, или отделом ИТ не редко встает задача, сделать единую и подпись в корпоративном стиле, при переписке сотрудников с использованием приложения Microsoft Outlook. В данной ситуации поступить логичнее всего следующим образом:

2. Написать небольшой скрипт с помощью VBS который компелирует файл подписи и рассылает его в папки пользователей,

3. Используя GPO (групповую политику) запускать данный скрипт у пользователей домена.

Итак тепер каждый пункт рассмотрим более детально.

Пункт №1.Определяем поля для добавления значений в единую подпись Outlook.

Из полей свойств объекта Active Directory можно взять такие параметры как:

1. objUser.FullName - выводит ФИО,

2. objUser.Title - выводит поле "Должность",

3. objUser.Company - Название компании, поле "Организация",

4. objUser.telephoneNumber - поле "Номер телефона",

5. objuser.ipPhone - поле "IP телефон", здесь можно указать добавочный телефон сотрудника,

6. objuser.mail - выводит поле "эл. почта",

7. objuser.wWWHomePage - отвечает за вывод сайта организации.

Мне данных полей впринципе хватило, но если этого не достатлчно, то жду описаний в комментариях.

После того, как эопределили параметры получится что-то типа:

Пункт №2 Скрипт для единого шаблона подписи в письме Outlook

Здесь я приведу текст скрипта который был протестирован мною лично. Скрипт можно изменить, можно добаить лого компании, другие строки, расположение, цвет и др. Я привожу только то, что реально мной используется.

On Error Resume Next
Set objSysInfo = CreateObject("ADSystemInfo")
strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)
strZpov = "С уважением,"
strPostIndex = ObjUser.postalCode
strName = objUser.FullName
strTitle = objUser.Title
strDepartment = objUser.Department
strCompany = objUser.Company
strPhone = objUser.telephoneNumber
strweb = objuser.wWWHomePage
strgorod = objuser.l
strstreet = objuser.streetAddress
strfax = objuser.facsimileTelephoneNumber
strIntPhone = objuser.ipPhone
strEmail = objuser.mail
Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection
Set objEmailOptions = objWord.EmailOptions
Set objSignatureObject = objEmailOptions.EmailSignature
Set objSignatureEntries = objSignatureObject.EmailSignatureEntries
objSelection.ParagraphFormat.Space1
objselection.font.color = RGB(0, 0, 0)
objSelection.TypeText strZpov
objSelection.TypeText CHR(11)
objSelection.TypeText strName
objSelection.TypeText CHR(11)
objSelection.TypeText strTitle
objSelection.TypeText CHR(11)
objSelection.TypeText strCompany
objSelection.TypeText CHR(11)
objSelection.TypeText "Тел. " & strPhone & " дб. " & strintPhone
objSelection.TypeText CHR(11)
objselection.font.color = RGB(0, 0, 255)
objSelection.Hyperlinks.Add objSelection.range, "mailto:" & strEmail, , , strEmail
objSelection.TypeText CHR(11)
objSelection.Hyperlinks.Add objSelection.Range, strWeb, "", "", strWeb
objSelection.TypeText CHR(11)
objselection.font.color = RGB(0, 0, 0)
objSelection.TypeText strPostIndex & strgorod & strstreet
Set objSelection = objDoc.Range()
objSignatureEntries.Add "AD Signature", objSelection
objSignatureObject.NewMessageSignature = "AD Signature"
objSignatureObject.ReplyMessageSignature = "AD Signature"
objDoc.Saved = True

Пункт №3. Добавляем скрипт единого шаблона подписи в письме Outlook в GPO.

Все при следующем входе в систему файлы подписи сформируются скриптом с помощью политик и заменят все подписи у клиентов.

date

27.04.2020

directory

Outlook, PowerShell

comments

комментариев 16

В этой статье мы покажем, как автоматически создать подпись пользователя в почтовом клиенте 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 кодом:

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 нужно добавить такой код:

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

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

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

способ добавить изображение в шаблон подписи outlook

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

Долгое время я искал решение для автоматизации создания подписи пользователей в Outlook по корпоративному стандарту. Хотя имеется и регламент, и инструкции для пользователей по созданию подписи, далеко не все обременяют себя её созданием, а в случае, если пользователи часто перемещаются с компьютера на компьютер, про нее вообще часто забывают 🙁

Просмотрев большое количество имеющихся решений, как правило на базе скриптов VBS, я остановился на одном из них, который, доработав, хочу предложить вашему вниманию. Данный скрипт берет данные текущего пользователя из AD и создает электронную подпись в соответствии с заданными параметрами. В случае, если некоторые поля в свойствах пользователя не заполнены, информация не отображается. Для удобства редактирования подписи в зависимости от вашего стандарта, я привел подробные комментарии в теле скрипта. С моими настройками подпись имеет вид:

Скрипт автоматической настройки подписи в Outlook

Сам скрипт:
On Error Resume NextSet objSysInfo = CreateObject("ADSystemInfo")strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)strRegard = "С уважением,"
'Получаем полное имя
strName = objUser.FullName
'Должность
strTitle = objUser.Title
'Подразделение
strDepartment = objUser.Department
'Компания
strCompany = objUser.Company
'Номер телефона
strPhone = objUser.telephoneNumber
'Сотовый
strMobile = objUser.mobile
'Факс
strFax = objuser.facsimileTelephoneNumber
'IP-телефон, у себя не использую, так как внутренний номер дописываю в поле основного телефона
'strIntPhone = objuser.ipPhone
'Получаем почтовый индекс
strPostIndex = ObjUser.postalCode
'Город
strCity = objuser.l
'Улица
strStreet = objuser.streetAddress
'адрес электронной почты
strEmail = objuser.mail
'WEB страница
strWeb = objuser.wWWHomePage
'Логотип организации
'strLogo = "\\domain.corp\NETLOGON\company-logo.jpg"

Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection
Set objEmailOptions = objWord.EmailOptions
Set objSignatureObject = objEmailOptions.EmailSignature
Set objSignatureEntries = objSignatureObject.EmailSignatureEntries

'Задаем настройки шрифта
'Шрифт
objSelection.Font.Name = "Arial"
'Размер
objSelection.Font.Size = "10"
'Цвет, можно указывать в десятичном или RGB формате, тогда: RGB(0, 55, 110)
objSelection.Font.Color = -738164481
'Формат
objSelection.ParagraphFormat.Space1

objSelection.TypeText strRegard
objSelection.TypeText CHR(11)
'Вставляем полное имя
objSelection.TypeText strName
objSelection.TypeText CHR(11)
'Должность
objSelection.TypeText strTitle
objSelection.TypeText CHR(11)
'Подразделение
objSelection.TypeText strDepartment
objSelection.TypeText CHR(11)
'Компанию
objSelection.TypeText strCompany
objSelection.TypeText CHR(11)
'Уменьшаем размер шрифта для адреса
objSelection.Font.Size = "9"
'Почтовый адрес
objSelection.TypeText strPostIndex & ", г. " & strCity & ", " & strStreet
objSelection.TypeText CHR(11)
'Телефон
objSelection.TypeText "Тел. " & strPhone ' доб. & strIntPhone
objSelection.TypeText CHR(11)
'Сотовый
objSelection.TypeText "Моб. " & strMobile
objSelection.TypeText CHR(11)
'Факс
objSelection.TypeText "Факс " & strFax
objSelection.TypeText CHR(11)
'Изменяем цвет для адреса электронной почты и сайта
objselection.font.color = RGB(0, 0, 255)
'Вставляем адрес почты
objSelection.Hyperlinks.Add objSelection.range, "mailto:" & strEmail, , , strEmail
objSelection.TypeText CHR(11)
'корпоративный сайт
objSelection.Hyperlinks.Add objSelection.Range, strWeb, "", "", strWeb
'objSelection.TypeText CHR(11)
'логотип компании
'objSelection.InlineShapes.AddPicture(strLogo)

Set objSelection = objDoc.Range()

objSignatureEntries.Add "Company Signature", objSelection
objSignatureObject.NewMessageSignature = "Company Signature"
objSignatureObject.ReplyMessageSignature = "Company Signature"

Сохраните скрипт в файл с расширением vbs и назначьте его выполнение с помощью GPO в разделе пользователя.

Для того что бы создать один стандарт подписи в почтовой переписке для всех пользователей, необходимо запустить Exchange Managment Console, зайти в "Organization Configuration"- "Hub Transport" зайти во вкладку "Transport Rules" и запустить создание нового транспортного правила, путем нажатия на "New Transport Rule. ". В открывшемся окне Edit Transport Rule/ Introduction в строке Name вписываем имя правила, например Signature, впишите Comment дабы не забыть что делает это правило. Нажимаем "Next".


В следующем окне выбираем для кого будет применяться данное правило, для тестов я бы рекомендовал выбрать from people и указать тестовых пользователей, при успешном тестировании можно выбрать всех пользователей домена. Нажимаем "Next".


В следующем окне выбираем append disclaimer text and fallback to action if unable to apply и указываем место расположение подписи и саму подпись.

append – в конец

Вставляем текст необходимого содержания. Следует отметить, что в Exchange 2010 можно использовать HTML-тэги. Необходимую информацию касательно индивидуальных данных пользователя (ФИО, должность, телефон) можно брать из атрибутов AD, использовав знак %- %%атрибут AD%%.

В данном примере %%Title%%- атрибут AD -Должность, %%DisplayName%%- Выводимое имя, %%Phone%%- телефон.

Нажимаете "Next".


В следующем окне можно сделать исключения, в этом примере я этого делать не буду, нажимаем "Next".


В завершении настройки правила, проверяем указанные параметры, если все верно нажимаем "Next", или же нажимаем "Back" для возвращения и исправления ошибок.


В окончании создания правила, нажимаем "Finish".


На этом, создания правила для подписи одного стандарта можно считать оконченной. Но не нужно забывать что у многих пользователей наверняка будет использоваться подпись которую они сделали сами в Outlook. Если оставить все как есть, то у них будет получаться две подписи в письме, первая которую они сделали сами и вторая корпоративная подпись для всех. Одно из очевидных решений- попросить пользователей удалить все созданные ими подписи, но это не наш метод, гораздо проще удалить эти подписи самим, с помощью групповой политики.

Файлы подписей MS Outlook хранит в папке %AppData%\Microsoft\Signatures оттуда нам и надо их удалить у всех пользователей. Для этого создадим групповую политику по очистки этой папки. Создаем групповую политику (или добавляем в существующую) заходим в "Конфигурация пользователя"- "Настройка"- "Конфигурация Windows"- "Папки". В открывшемся окне в поле Действия выбираем "Заменить", в строке Путь прописываем %AppData%\Microsoft\Signatures и устанавливаем галочки для удаления всего содержимого папки, нажимаем "Ок". После применения этой политики у пользователей пропадут созданные ими подписи в Outlook.


На этом создание единого корпоративного стандарта подписей в Outlook можно считать завершенной.

Читайте также: