Добавьте праздник или иное событие в календари всех пользователей без посылки предварительных запросов.
Введение
Скажем, кто-то поставил перед вами задачу оповестить о чем-то всех служащих компании. Например, о внутреннем собрании. Самое простое действие — послать каждому запрос. Но вы понимаете, что таких событий может быть несколько, и далеко не все отреагируют на ваш запрос (как самый удобный способ не появляться на очередном нудном собрании).
Итак, вы выбираете другой путь. В Outlook есть два возможных для импорта формата событий. Outlook.txt используется в Outlook 97, 98 и 2000, а в XP/2003 — Outlook.hol. Можно использовать их, но пользователи будут должны импортировать их вручную (можно сделать это самому, создав профиль для каждого пользователя на своей машине). Это нудное занятие, поэтому кто-то может решить писать скрипты или использовать какой-то такой заранее подготовленный код:
http://www.outlookcode.com/d/forms/holiday.htm
Тесты показывают, что такой подход замечательно работает в Outlook 2000 без установленного SP3, новые же версии блокируют макросы и спрашивают пользователей о разрешить дальнейшей работы. Макросы можно подписать, но так или иначе придётся распространять их через скрипты входа, что нормально, если не рассматривать пользователей, который редко входят в вашу сеть (например, удаленные работники). Некоторые из них будут неприятно удивлены, когда обнаружат, что не приглашены на ту или иную встречу.
От всего этого вскоре заболит голова, так что я предлагаю другой метод, который использует утилиту Exchange ExMerge для распространения таких событий.
Установка ExMerge
Мастер `Exchange Server Mailbox Merge` использовался изначально для выуживания информации из серверов с повреждёнными базами или для переноса почтовых ящиков на новое место.
Exmerge копирует всю информацию с сервера в .PST файл, который, затем, может быть импортирован в другом месте. Но он также может использоваться и для присоединения новых данных, что полезно в нашем случае.
Скачать Exmerge 2003 можно тут:
http://www.microsoft.com/downloads/details.aspx?FamilyID=429163ec-dcdf-47dc-96da-1c12d67327d5&displaylang=en
При установке его на рабочую станцию убедитесь, что у вас уже стоит Exchange 2003 System Manager.
После установки добавьте "c:\program files\exchsrvr\bin" в %path%, чтобы Exmerge смог найти необходимые библиотеки. Это делается в "Панель управления -> Система".
Для импорта и экспорта информации утилите требуется полный доступ к почтовым ящикам. В Exchange 2000/2003 таких прав у администраторской учетной записи нет.
Для преодоления этого потребуется утилита ADSIEdit. Чтобы её использовать, сначала установите Windows 2000/2003 Support Tools. Затем найдите объект Exchange Organization (показано на рисунке).
Свойства этого объекта покажут, что у Администратора, групп Domain Admins и Enterprise Admins прав на операции «Receive As» и «Send As» нет. Сняв галочку запрета, получим доступ к почтовым ящикам из-под записи администратора.
Альтернативный вариант создать пользователя и добавить его в группы «Exchange Enterprise Server group» и «Server Operators».
Создание файла событий
Следующим моментом будет создание шаблона. Для этих целей я использовал ящик администратора, т.к. его календарь был пуст.
Добавим парочку событий:
После окончания экспортируем всё в PST файл (форма File -> Import and Export в главном меню Outlook).
Множим PST файл
Exmerge экспортирует и импортирует файлы, основываясь на поле Alias, которое обычно совпадает с именем пользователя. В Active Directory это поле носит название «mailNickname».
Получается, что для использования Exmerge для импорта событий в пользовательские календари, нам понадобятся различные копии созданного PST файла, соответствующие алиасам ящиков.
Далее приведён скрипт в формате VBScript. Для его использования скопируйте и вставьте текст в блокнот, сохраните с расширением VBS.
Dim rootDSE, domainObject
'Find the domain container for your domain
Set rootDSE=GetObject(LDAP://RootDSE)
DomainContainer = rootDSE.Get("defaultNamingContext")
Set fs = CreateObject ("Scripting.FileSystemObject")
'Now we want to open a channel to Active Directory:
Set conn = CreateObject("ADODB.Connection")
conn.Provider = "ADSDSOObject"
conn.Open "ADs Provider"
'After opening a channel we construct the LDAP query. It looks for all the
ldapStr = ";(& (mailnickname=*) (|
(&(objectCategory=person)(objectClass=user)(!(homeMDB=*))
(!(msExchHomeServerName=*)))(&(objectCategory=person)
(objectClass=user)
(|(homeMDB=*)(msExchHomeServerName=*))) ));adspath;subtree"
'Then we actually execute the LDAP query.
Set rs = conn.Execute(ldapStr)
'So, now we've got an array of users (rs) that we can use.
While Not rs.EOF
Set oUser = GetObject (rs.Fields(0).Value)
'Disregard the System Mailbox used internally by Exchange
if Left (OUser.MailNickname,13) "SystemMailbox" Then
'Make a copy of the original PST with using the alias of the user
fs.CopyFile "c:\PST\administrator.pst","C:\PST\" & OUser.mailNickname & ".pst"
End If
rs.MoveNext
Wend
В скрипте считается, что пользователь в файле-шаблоне Administrator и сам файл находится в C:\PST. Изменить это можно тут:
fs.CopyFile "c:\PST\administrator.pst","C:\PST\" & OUser.mailNickname & ".pst"
Скрипт будет работать в любом домене и организации, так что изменять это не обязательно.
Импортируем, используя Exmerge
Теперь всё готово для запуска мастера Exmerge.
По окончании процесса импорта, открыв ящик пользователя, обнаружим напоминание.
Удаление запланированных событий
О добавлении записей мы уже позаботились, но что делать при переносе или отмене события?
Расширенные опции утилиты позволяют удалять любые записи, основываясь на критерии (используйте «Extract» для этого). Этот метод экспортирует выбранную информацию в PST файлы, которые можно просто удалить.
Выбираем встречу «Apocalypse» для удаления.
В самом деле, как только процесс окончился, встреча удалилась из всех ящиков.
Заключение
Процесс мог показаться сложным, но, единожды поняв всё, его можно использовать для различных целей.
Необходимо отметить, что он работает на стороне сервера и для любого клиента, а это становится важнее с каждым днём, т.к. увеличивается количество мобильных/удалённых подключений к Exchange.