|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] PS: Синхронизация контактов Outlook`a с AD |
|
PowerShell - [решено] PS: Синхронизация контактов Outlook`a с AD
|
Пользователь Сообщения: 77 |
Пишу скрипт по синхронизации Email адресов, которые хранятся в АД и контактов в Outlook`е.
Смысл в том, что скрипт по добавлению Email адресов из АД в Outlook уже есть он описан на форуме тут Но при каждом запуске скрипта в Outlook`e появляются дубликаты одних и тех же записей. Я хочу написать скриптик который бы делал вот что: 1) При импорте проверял бы есть такой контакт в Outlook`e, если есть то повторно не импортировать, если же нету то импортировался но с дополнительным полем которое бы указывало на то, что этот объект импортирован из АД 2) Потом бы проверялись контакты в Outlook`e если контакт имеет поле импортирован то такойже объект ищется в АД если его там нету то этот контакт удаляется из Outlook`а, если же контакт создал сам пользователь и у него нету поля которое показывает что он создан при импорте то этот контакт остается без изменения. так вот я не знаю как правильно реализовать то что я хочу и я пошел обходным путем (если кто знает как сделать правильней и лучше подскажите!!!): Я сначала удаляю контакты из Outlook`а в которых присутствуют поля означающие что этот контакт импортирован (у меня за это отвечает два поля $_.Mileage и $_.BusinessHomePage) контакты созданные пользователем не трогаем. Потом необходимо проделать импорт из АД в Outlook с полями означающими импорт. так вот у меня неправильно работает удаление контактов с полем означающим импорт. я делаю это так:
когда запускаешь этот скрипт без метода $_.delete() то все проходит как положено все контакты правильно показываются какие импортированы а какие пользовательские, а когда же ставим метод $_.delete() то контакты как бы делятся на две части и удаляются только половина импортированных контактов. И так чтобы удалить все импортированные контакты надо несколько раз запустить скрипт на удаление… Почему так, помогите!!! Или предложите другой метод, всем предложения решения задачи буду рад!!! |
|
Отправлено: 11:36, 06-09-2011 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Спасибо, теперь ясно. Посмотрим.
|
Отправлено: 13:59, 10-09-2011 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Смотрите, как это работает в целом:
$oOutlook = New-Object -ComObject Outlook.Application $oNameSpace = $oOutlook.GetNamespace("MAPI") $oMAPIFolder = $oNameSpace.GetDefaultFolder(10) # Подключаемся или создаём папку «Контакты моей компании» try { $oMyMAPIFolder = $oMAPIFolder.Folders.Item("Контакты моей компании") } catch { $oMyMAPIFolder = $oMAPIFolder.Folders.Add("Контакты моей компании") } $cContacts = $oMyMAPIFolder.Items # Добавляем Контакт №1 $oContact = $cContacts.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() # Добавляем Контакт №2 $oContact = $cContacts.Add(2) $oContact.LastName = "Test_LastName2" $oContact.Email1Address = "test2@email.ru" $oContact.CompanyName = "Моя компания" $oContact.Department = "test_Department" $oContact.BusinessHomePage = "http://company.com/" $oContact.Mileage = "1" $oContact.Save() # Добавляем Контакт №3 $oContact = $cContacts.Add(2) $oContact.LastName = "Test_LastName3" $oContact.Email1Address = "test3@email.ru" $oContact.CompanyName = "Не моя компания" $oContact.Department = "" $oContact.BusinessHomePage = "http://non-my-company.com/" $oContact.Mileage = "1" $oContact.Save() # Перечисляем все контакты из папки «Контакты моей компании» $cContacts | ForEach-Object -process { Write-Host $oContact.LastName $oContact.Email1Address $oContact.EntryID -ForegroundColor Blue } # Удаляем контакты из папки «Контакты моей компании» $oContact = $cContacts.Find("[Mileage] = ""1"" AND [BusinessHomePage] = ""http://company.com/""") while ($oContact -ne $null) { Write-Host $oContact.LastName $oContact.Email1Address $oContact.EntryID -ForegroundColor Red $oContact.Delete() $oContact = $cContacts.FindNext() } |
Отправлено: 02:59, 13-09-2011 | #12 |
Пользователь Сообщения: 77
|
Профиль | Отправить PM | Цитировать Iska, Ты крут! так работает... подскажи книжки по PS чтобы поизучать, желательно рускоязычные) Ещё раз хочу выразить тебе свою огромную презнательность!!! Спасибо за помощь!!!
|
Отправлено: 07:40, 13-09-2011 | #13 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата dosperados:
Цитата dosperados:
|
||
Отправлено: 15:06, 13-09-2011 | #14 |
Новый участник Сообщения: 3
|
Профиль | Сайт | Отправить PM | Цитировать Накидал модуль для PowerShell - ITG.Outlook. Пока в нём только обработку контактов и реализовал. Примеры кода с применением модуля привёл у себя в блоге - http://sergey-s-betke.blogs.novgaro....from-csv-or-ad.
Пример кода: Get-ADUser ` -Filter * ` -SearchBase $OU ` -SearchScope Subtree ` -Properties ` displayName, givenName, sn, initials, title, userPrincipalName, info, ` manager, ` company, department, ` co, countryCode, postalCode, st, l, streetAddress, ` telephoneNumber, facsimileTelephoneNumber, homePhone, ipPhone, mobile, otherTelephone, wWWHomePage, mail ` | New-OutlookContact -Force -PassThru ` | Select-Object Subject, EMail1DisplayName, EMail1Address ` | Out-GridView ` ; |
Отправлено: 23:29, 26-10-2012 | #15 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|