|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] PS: Синхронизация контактов Outlook`a с AD |
|
|
PowerShell - [решено] PS: Синхронизация контактов Outlook`a с AD
|
Пользователь Сообщения: 77 |
Профиль | Отправить PM | Цитировать Пишу скрипт по синхронизации Email адресов, которые хранятся в АД и контактов в Outlook`е.
Смысл в том, что скрипт по добавлению Email адресов из АД в Outlook уже есть он описан на форуме тут Но при каждом запуске скрипта в Outlook`e появляются дубликаты одних и тех же записей. Я хочу написать скриптик который бы делал вот что: 1) При импорте проверял бы есть такой контакт в Outlook`e, если есть то повторно не импортировать, если же нету то импортировался но с дополнительным полем которое бы указывало на то, что этот объект импортирован из АД 2) Потом бы проверялись контакты в Outlook`e если контакт имеет поле импортирован то такойже объект ищется в АД если его там нету то этот контакт удаляется из Outlook`а, если же контакт создал сам пользователь и у него нету поля которое показывает что он создан при импорте то этот контакт остается без изменения. так вот я не знаю как правильно реализовать то что я хочу и я пошел обходным путем (если кто знает как сделать правильней и лучше подскажите!!!): Я сначала удаляю контакты из Outlook`а в которых присутствуют поля означающие что этот контакт импортирован (у меня за это отвечает два поля $_.Mileage и $_.BusinessHomePage) контакты созданные пользователем не трогаем. Потом необходимо проделать импорт из АД в Outlook с полями означающими импорт. так вот у меня неправильно работает удаление контактов с полем означающим импорт. я делаю это так:
когда запускаешь этот скрипт без метода $_.delete() то все проходит как положено все контакты правильно показываются какие импортированы а какие пользовательские, а когда же ставим метод $_.delete() то контакты как бы делятся на две части и удаляются только половина импортированных контактов. И так чтобы удалить все импортированные контакты надо несколько раз запустить скрипт на удаление… Почему так, помогите!!! Или предложите другой метод, всем предложения решения задачи буду рад!!! |
|
Отправлено: 11:36, 06-09-2011 |
Пользователь Сообщения: 77
|
Профиль | Отправить PM | Цитировать Что-то ни кто даже слово не напишет) что все боятся запустить у себя этот скрипт!? Он ничего не удалит если не будет в контакте особых полей ($_.Mileage и $_.BusinessHomePage) с нужными значениями. только если два этих поля удовлетворили условию тогда этот контакт удалиться...
Мне нужен совет гуру, почему при тесте без использования $_.delete() все работает как положено, а с ним неправильно!!! Ну или вообще как подругому сделать) |
Отправлено: 05:51, 07-09-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать dosperados, возможно, это как-то связано с перемещением по коллекции. Я с чем-то подобным при работе с коллекциями сталкивался и под WSH.
Попробуйте работать не с коллекцией, а с выборкой по условию: $outlook = New-Object -ComObject Outlook.Application $mapi = $outlook.GetNamespace("MAPI") $Contacts = $mapi.GetDefaultFolder(10).Items $Contact = $Contacts.Find("[Mileage] = ""1"" AND [BusinessHomePage] = ""http://company.com/""") while ($Contact -ne $null) { Write-Host $Contact.LastName $Contact.Email1Address $Contact.EntryID -ForegroundColor blue $Contact.Delete() $Contact = $Contacts.FindNext() } |
Отправлено: 08:37, 07-09-2011 | #3 |
Пользователь Сообщения: 77
|
Профиль | Отправить PM | Цитировать Iska, Спасибо твой метод работает как положенно, но кто знает как реализовать мою задумку не через попу как сейчас, а правильно!?
|
Отправлено: 18:47, 07-09-2011 | #4 |
Пользователь Сообщения: 77
|
Профиль | Отправить PM | Цитировать Такой вопрос: я создаю в папке "\\Outlook\Контакты" подпапку "Контакты моей компании" саму папку я успешно создаю, но если начинаешь создавать контакты в ней, они сохраняется в папке "Контакты", а мне надо чтобы он сохранился в подпапке "Контакты моей компании".
Кто решал такую проблему подскажите...
|
|
Последний раз редактировалось dosperados, 08-09-2011 в 11:29. Причина: ошибка орфографическая Отправлено: 11:26, 08-09-2011 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать dosperados, попробуйте так:
$oOutlook = New-Object -ComObject Outlook.Application $oNameSpace = $oOutlook.GetNamespace("MAPI") $oMAPIFolder = $oNameSpace.GetDefaultFolder(10) try { $oMyMAPIFolder = $oMAPIFolder.Folders.Item("Контакты моей компании") } catch { $oMyMAPIFolder = $oMAPIFolder.Folders.Add("Контакты моей компании") } $oContact = $oMyMAPIFolder.Items.Add(2) $oContact.LastName = "Test_LastName" $oContact.Email1Address = "test@email.ru" $oContact.CompanyName = "Моя комания" $oContact.Department = "test_Department" $oContact.BusinessHomePage = "http://company.com/" $oContact.Mileage = "1" $oContact.Save() |
Отправлено: 23:44, 08-09-2011 | #6 |
Пользователь Сообщения: 77
|
Профиль | Отправить PM | Цитировать Iska, Ты гений так легко и просто решил две мои проблемы! Огромное тебе, человеческое спасибо!
Iska, Можно ещё один глупый вопрос зачем буковка o в переменных $oContact, она что-то значит или просто для красоты? |
Отправлено: 06:58, 09-09-2011 | #7 |
Пользователь Сообщения: 77
|
Профиль | Отправить PM | Цитировать Iska, Будь добр подскажи ещё раз! По отдельности все что ты мне помогал работает, а вот когда совмещаю все в одно, то работает не совсем так как нужно... папку создает и в ней контакты тоже, но удалить из папки контакты не получается.
|
Последний раз редактировалось dosperados, 10-09-2011 в 13:02. Отправлено: 10:59, 09-09-2011 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата dosperados:
Цитата dosperados:
И на что мне ориентироваться? На код в предыдущем посте или тот, что Вы прислали в личку? Определитесь. |
||
Отправлено: 00:11, 10-09-2011 | #9 |
Пользователь Сообщения: 77
|
Профиль | Отправить PM | Цитировать Не работает вот эта часть скрипта, когда контакты созданы в подпапке т.е. ("\\Outlook\Контакты\контакты компании") невозможно их удалить.
В этой части скрипта я пытался получить папку "контакты компании" и методом Find найти все содержимое и в цикле удалить каждый найденный элемент, но мне возвращается ошибка что метода FindNext() нет для данного объекта. и что я делаю неправильно я непойму...
Удалить содержимое этой папки я пытался разными способами: Другой вариант удалить саму папку "контакты компании" такой вариант тоже мне подойдет... Ну или удалять содержимое этой папки по фильтрам. Но ни так у меня не получается. |
Отправлено: 13:20, 10-09-2011 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
2007 - MS Outlook замена форм контактов | Maggy | Microsoft Office (Word, Excel, Outlook и т.д.) | 5 | 21-06-2011 17:06 | |
2007 - Синхронизация Outlook с онлайн-сервисом | tym83 | Microsoft Office (Word, Excel, Outlook и т.д.) | 7 | 31-12-2010 10:36 | |
2007 - удаление контактов с Outlook Express 2007 | log74 | Microsoft Office (Word, Excel, Outlook и т.д.) | 0 | 03-06-2010 04:57 | |
Разное - [Outlook] Отсортировать список контактов в Адресной книге | Gangabass | Microsoft Office (Word, Excel, Outlook и т.д.) | 0 | 18-08-2009 08:28 | |
V. 2007 - Ошибка при попытке добавить множество контактов в список рассылки в Outlook | Dmitriy_K | Microsoft Exchange Server | 1 | 03-04-2009 10:56 |
|