0

我正在使用javascript和activex通过IE中的EntryID自动打开公用文件夹并遇到一些错误。为了调试,我将它重写为一个 power shell 脚本。

$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();

如果我完全关闭 Outlook,然后运行脚本,我会收到以下错误

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中实现这个解决方法
4

2 回答 2

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行注释与否。

于 2012-05-16T10:17:31.733 回答
0

您可以以编程方式获取公用文件夹存储:

$ol = New-Object -ComObject Outlook.Application
$pf = $ol.GetNamespace("MAPI").Folders | Where-Object {$_.FolderPath -like "\\Public Folders*"}
$pf.Display()
于 2012-05-16T11:21:48.737 回答