Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Динамическое создание и изменение групп рассылки в Outlook (DistList) (http://forum.oszone.net/showthread.php?t=231934)

dosperados 03-04-2012 05:55 1892318

Динамическое создание и изменение групп рассылки в Outlook (DistList)
 
Вложений: 1
Стоит задача создавать в Outlook группы рассылок (или она же "группа контактов") (Distanation List). Путем проб и ошибок я нашел как создать объект "группа рассылок"

Код:

$VerbosePreference = "Continue"
Write-Verbose "Подключаемся к Outlook"
$oOutlook    = New-Object -ComObject Outlook.Application

Write-Verbose "Получаем MAPI"
$oNameSpace  = $oOutlook.GetNamespace("MAPI")
Write-Verbose "Получаем папку Контакты"
$oMAPIFolder = $oNameSpace.GetDefaultFolder(10)
Write-Verbose "Создаем папку"
    $oMyMAPIFolder = $oMAPIFolder.Folders.Add("Контакты организации")
        Write-Verbose "Устанавливаем на эту папку галочку ""Показывать как адресную книгу"""
        $oMyMAPIFolder.ShowAsOutlookAB = "True"
Write-Verbose "Получаем содержимое папки контактов"
$cContacts = $oMyMAPIFolder.Items

$a2 = $cContacts | select -Index 2
$a5 = $cContacts | select -First 5

Write-Verbose "Создание объекта ""DistList"""

  $oContact = $oMyMAPIFolder.Items.Add(7)
  $oContact.DLname = "distlist"
  $oContact.body = "Описание группы рассылки"
  $oContact.AddMember($a2)
  #$oContact.AddMembers($a5)
    #Сохраняем контакт
    $oContact.Save()


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

Созданные объект имеет вот такие поля:
читать дальше »

Application : Microsoft.Office.Interop.Outlook.ApplicationClass
Class : 69
Session : Microsoft.Office.Interop.Outlook.NameSpaceClass
Parent : System.__ComObject
Actions : System.__ComObject
Attachments : System.__ComObject
BillingInformation :
Body : Тело группы рассылки
Categories :
Companies :
ConversationIndex : 01CD1140C64F7274E4C9F6ED4906A40075EC151ABE8D
ConversationTopic : distlist
CreationTime : 03.04.2012 9:23:36
EntryID : 0000000059AD1D58D7D0254DA4C3F892D929361C84A92500
FormDescription : System.__ComObject
GetInspector : System.__ComObject
Importance : 1
LastModificationTime : 03.04.2012 9:23:36
MAPIOBJECT : System.__ComObject
MessageClass : IPM.DistList
Mileage :
NoAging : False
OutlookInternalVersion : 146109
OutlookVersion : 14.0
Saved : True
Sensitivity : 0
Size : 1620
Subject : distlist
UnRead : False
UserProperties : System.__ComObject
DLName : distlist
MemberCount : 0
CheckSum : 0
Members : {}
OneOffMembers : {}

Links : System.__ComObject
DownloadState : 1
ItemProperties : System.__ComObject
MarkForDownload : 0
IsConflict : False
AutoResolvedWinner : False
Conflicts : System.__ComObject
PropertyAccessor : System.__ComObject
TaskSubject : distlist
TaskDueDate : 01.01.4501 0:00:00
TaskStartDate : 01.01.4501 0:00:00
TaskCompletedDate : 01.01.4501 0:00:00
ToDoTaskOrdinal : 01.01.4501 0:00:00
ReminderOverrideDefault : False
ReminderPlaySound : False
ReminderSet : False
ReminderSoundFile :
ReminderTime : 01.01.4501 0:00:00
IsMarkedAsTask : False
ConversationID :
RTFBody : {123, 92, 114, 116...}

Kazun 03-04-2012 18:20 1892758

Код:

$res=$oOutlook.Session.CreateRecipient($a2.Email1Address)
$res.Resolve()
$oContact.AddMember($res)


dosperados 04-04-2012 08:14 1893058

Kazun, Спасибо, но это какое то корявое решение...
Хочется чтобы все было как положенно.

Может быть, можно как то использовать.
Код:

$oOutlook.Session.GetRecipientFromID
или если можно было бы сделать вот так
Код:

$res=$oOutlook.Session.CreateRecipient($a2)
Как я понимаю в этом методе
Код:

$res=$oOutlook.Session.CreateRecipient($a2)
Posh не может сопоставить свойства объекта $a2 к свойствам вновь созданного $res.
возможно ли ему явно указать что куда ставить.
что-то на подобие вот этого
Код:

Set objRcpnt = outlook.Session.CreateRecipient(arrData(i, 2))

Kazun 04-04-2012 11:27 1893165

А что в нем кривого?

$res=$oOutlook.Session.CreateRecipient($a2.Email1Address)
$oOutlook.Session.GetRecipientFromID($res.EntryID)

Как это не может сопоставит? Все прекрасно отрабатывает и вновь он ничего нового не создает ,а только разрешает в существующие.Для явного указания ,следует указать определенное свойство или создать массив новый,в который включить имена и адрес,и уже подставлять по индексу,но смысл непонятен,когда уже есть массив с требуемыми свойствами.

dosperados 04-04-2012 14:48 1893321

Вложений: 1
Цитата:

Цитата Kazun
А что в нем кривого? »

Некрасиво что он имя и адрес ставит одно и тоже...
http://forum.oszone.net/attachment.p...1&d=1333535825

Цитата:

Цитата Kazun
Как это не может сопоставит? »

Я имею введу что вот этот код не может на автомате сопаставить свойства объекта $a2 к свойствам вновь созданного $res.
Код:

$res=$oOutlook.Session.CreateRecipient($a2)
Цитата:

Цитата Kazun
но смысл непонятен,когда уже есть массив с требуемыми свойствами. »

Может быть и нет необходимости создавать массив, но как я понял
$oOutlook.Session.CreateRecipient(string Recipientname) имеет только 1 параметр и написать вот так
Код:

$res=$oOutlook.Session.CreateRecipient($a2.Email1Address, $a2.Email1DisplayName)
уже не получится написать.


Время: 17:22.

Время: 17:22.
© OSzone.net 2001-