0

私は、JavaScriptとActiveXを使用してIEからのEntryIDによってパブリックフォルダーを開く自動化に取り組んでおり、いくつかのエラーが発生しました。デバッグするために、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();

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を完全に閉じるまでは、コンソールに出力するまで$nscomオブジェクトが実際に初期化されていないかのように見えます。

知りたいのですが:

  • 電話$nsで問題が解決する理由
  • PowerShellが2つの引数を渡していると考える理由
  • この回避策をjavascriptで実装する方法はありますか
4

2 に答える 2

0

GetFolderFromID() には、必要なフォルダーの EntryID と StoreID の 2 つの引数が必要です。

このコードではエラーは発生せず、PublicFolder が選択された状態で Outlook が表示されます。

$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 に答える