Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] PS: Синхронизация контактов Outlook`a с AD

Ответить
Настройки темы
PowerShell - [решено] PS: Синхронизация контактов Outlook`a с AD

Аватара для dosperados

Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


Пишу скрипт по синхронизации Email адресов, которые хранятся в АД и контактов в Outlook`е.
Смысл в том, что скрипт по добавлению Email адресов из АД в Outlook уже есть он описан на форуме тут
Но при каждом запуске скрипта в Outlook`e появляются дубликаты одних и тех же записей.
Я хочу написать скриптик который бы делал вот что:
1) При импорте проверял бы есть такой контакт в Outlook`e, если есть то повторно не импортировать, если же нету то импортировался но с дополнительным полем которое бы указывало на то, что этот объект импортирован из АД
2) Потом бы проверялись контакты в Outlook`e если контакт имеет поле импортирован то такойже объект ищется в АД если его там нету то этот контакт удаляется из Outlook`а, если же контакт создал сам пользователь и у него нету поля которое показывает что он создан при импорте то этот контакт остается без изменения.

так вот я не знаю как правильно реализовать то что я хочу и я пошел обходным путем (если кто знает как сделать правильней и лучше подскажите!!!):
Я сначала удаляю контакты из Outlook`а в которых присутствуют поля означающие что этот контакт импортирован (у меня за это отвечает два поля $_.Mileage и $_.BusinessHomePage) контакты созданные пользователем не трогаем. Потом необходимо проделать импорт из АД в Outlook с полями означающими импорт.

так вот у меня неправильно работает удаление контактов с полем означающим импорт.
я делаю это так:
PHP код: Выделить весь код

#Подключаемся к Outlook

$outlook = New-Object -ComObject Outlook.Application
$mapi 
$outlook.GetNamespace("MAPI")
#Получаем папку контактов
$Contacts $mapi.GetDefaultFolder(10).Items
$Contacts 
| ForEach { 
 if (
$_.Mileage -match "1" )        
     {if (
$_.BusinessHomePage -match "http://company.com/" )        
        {
Write-Host " Импортированный контакт " $_.LastName $_.Email1Address  -ForegroundColor blue $_.delete() }  
    } 
       else { 
Write-Host " Пользовательский контакт " $_.LastName $_.Email1Address  -ForegroundColor Red}
                            } 

когда запускаешь этот скрипт без метода $_.delete() то все проходит как положено все контакты правильно показываются какие импортированы а какие пользовательские, а когда же ставим метод $_.delete() то контакты как бы делятся на две части и удаляются только половина импортированных контактов. И так чтобы удалить все импортированные контакты надо несколько раз запустить скрипт на удаление…
Почему так, помогите!!! Или предложите другой метод, всем предложения решения задачи буду рад!!!

Отправлено: 11:36, 06-09-2011

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Спасибо, теперь ясно. Посмотрим.

Отправлено: 13:59, 10-09-2011 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить 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


Аватара для dosperados

Пользователь


Сообщения: 77
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, Ты крут! так работает... подскажи книжки по PS чтобы поизучать, желательно рускоязычные) Ещё раз хочу выразить тебе свою огромную презнательность!!! Спасибо за помощь!!!

Отправлено: 07:40, 13-09-2011 | #13


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата dosperados:
Iska, Ты крут! »
Нет. Я сам неспешно учусь этому языку.


Цитата dosperados:
подскажи книжки по PS чтобы поизучать, желательно рускоязычные »
Windows PowerShell: Коллекция ссылок. Там есть и про книги. На русском мало. Читайте русскоязычные блоги Гусева, Сотникова и других специалистов.

Отправлено: 15:06, 13-09-2011 | #14


Новый участник


Сообщения: 3
Благодарности: 1

Профиль | Сайт | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] PS: Синхронизация контактов Outlook`a с AD

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход