3

(任意のユーザーの) メールボックスを Exchange 2010 Server から PST ファイルにエクスポートしようとしています。これをアーカイブする最良の方法は何ですか?

最初に、COM-Interop モデルを見ていました。しかし、これは現在 Outlook にログインしているユーザーのメールボックスをエクスポートできるようです。それとも私はそこに何かが欠けていますか?私はこれを試しました:

Dim app As New Outlook.Application()
Dim ns As Outlook.NameSpace = app.GetNamespace("MAPI")
ns.AddStore("C:\backup.pst")
Dim backupFolder As Outlook.MAPIFolder = ns.Session.Folders.GetLast()
Dim selectedMailBox As Outlook.MAPIFolder = ns.Folders("mymail@company.com") 'NOT Working
selectedMailBox.CopyTo(backupFolder)
ns.RemoveStore(backupFolder)

後で、この PowerShell 関数を見つけました。New-MailboxExportRequest 残念ながら、これを .NET から呼び出す方法が見つかりません。.NET から呼び出す可能性はありますか?

または、Exchange からファイルをエクスポートするために他のライブラリを使用する必要がありますか? (たぶん、POP3 を使用してすべてのメールを取得し、それらを PST に変換しますか? )

4

3 に答える 3

1

問題のメールボックスにアクセスできるドメイン ユーザーとしてコードを実行し、 RDOSession.LogonExchangeMailbox を呼び出すことできます。その後、 を使用して他のユーザーのメールボックスを開くことができますRDOSession.Stores.GetSharedMailboxRDOStoreオブジェクトを取得すると、 で始まるすべてのフォルダーとメッセージにアクセスできるようになりますRDOStore.IPMRootFolder

PST ストアにコピーするには、 を使用して新規または既存の PST ファイルを追加できますRDOSession.Stores.AddPstStore

次のようなものを使用して、すべてのフォルダーをコピーするには

foreach (RDOFolder sourceFolder in ExchangeStore.IPMRootFolder.Folders)
{
  sourceFolder.CopyTo(PstStore.IPMRootFolder);
}
于 2013-03-10T01:50:50.877 に答える
0

System.Management.AutomationおよびSystem.Management.Automation.Runspacesを使用して、C#でPowershellコマンドを実行できます。

非常に限られた例:

int GetMiliseconds()
{
    using (var ps = System.Management.Automation.PowerShell.Create())
    {
        var cmd = new System.Management.Automation.Runspaces.Command("Get-Date");
        ps.Commands.AddCommand(cmd);
        var result = ps.Invoke();
        return result != null && result.Any() ? result.First().Members["Millisecond"].Value as Int32? ?? 0 : 0;
    }
}  

最も難しい部分は、結果が常にとして返されるICollection<PSObject>ことです。スローされた例外とnull値に常に目を光らせておく必要があります。

于 2013-03-09T23:50:58.640 に答える