2012-05-15 60 views
0

我正在通過使用javascript和activex從IE的EntryID自動化打開公用文件夾,並且運行了一些錯誤。爲了調試,我將它重新編寫爲Power Shell腳本。PowerShell展望自動化名稱空間

$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 

如果我去掉了$ NS線,一切正常,即使其再取出。也就是說,直到我完全關閉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()只需要一個參數。第二個參數商店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