2012-05-15 2 views
0

Я работаю с автоматизацией открытия общей папки EntryID из IE с помощью javascript и activex и пробегает некоторые ошибки. Чтобы отлаживать, я переписал его как сценарий командной оболочки.powershell outlook automation namespace

$eid = "HEX EntryID FOR PUBLIC FOLDER"; 

$o = new-object -com outlook.application; 
$ns = $o.GetNamespace("MAPI"); 
#$ns #if this line is commented, error 
$f = $ns.GetFolderFromID($eid) 
$f.Display(); 

Если я закрываю взгляд вниз полностью, а затем запустить сценарий, я получаю следующую ошибку

Exception calling "GetFolderFromID" with "2" argument(s): "The messaging interface has returned an unknown error. If the problem persists, restart Outlook." 
At G:\scripts\outlook.ps1:5 char:25 
+ $f = $ns.GetFolderFromID <<<< ($eid) 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : DotNetMethodException 

Если я раскомментировать строку $ нс, все работает отлично, даже если его снова удалены. То есть, пока я полностью не закрываю Outlook, почти как если бы объект $ ns com не был инициализирован до тех пор, пока я не вывешу его на консоль.

Я хотел бы знать:

  • почему вызова $ns исправляет проблему
  • почему думает PowerShell я передаю 2 аргумента
  • есть способ реализации этого метода обхода в JavaScript

ответ

0

Для GetFolderFromID() требуются два аргумента: идентификатор EntryID и StoreID требуемой папки.

Этот код не дает ошибки и показать перспективы с PublicFolder выбран:

$o = new-object -com outlook.application; 
$ns = $o.GetNamespace("MAPI"); 
$cp = $ns.Folders # FolderClass ComObject containing all Outlook folders, usually first is the PublicFolder 
$f = $ns.GetFolderFromID($cp.GetFirst().EntryID ,$cp.GetFirst().StoreID) 
$f.Display(); 

Использование кода Я не могу это сделать, $ns линия комментировал или нет.

+0

GetFolderFromID() требует только один аргумент. Второй аргумент Store ID не является обязательным. http://msdn.microsoft.com/en-us/library/bb219901(v=office.12).aspx – Pete

+0

@Pete Хорошо, я не читал msdn, просто посмотрел на OverloadDefinitions метода. Хорошо знать! –

0

Вы можете получить общие папки магазин программно:

$ol = New-Object -ComObject Outlook.Application 
$pf = $ol.GetNamespace("MAPI").Folders | Where-Object {$_.FolderPath -like "\\Public Folders*"} 
$pf.Display() 
+0

Я специально пытаюсь открыть папку, в которой у меня есть определенный EntryID, а не база магазина. Я уточнил свой вопрос для ясности. – Pete

Смежные вопросы