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

您可以为此使用Redemption - 以域用户身份运行您的代码,该用户可以访问相关邮箱并调用RDOSession.LogonExchangeMailbox。然后,您可以使用 . 打开其他用户的邮箱RDOSession.Stores.GetSharedMailbox。拥有RDOStore对象后,您将能够访问以 . 开头的所有文件夹和消息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 回答
0

哪个交换服务器?在 Exchange Server 2013 中,您必须首先授予此角色的权限,因为即使管理员也没有权限。使用管理权限打开 Windows Power-Shell,执行以下命令:

New-ManagementRoleAssignment –角色“邮箱导入导出” –用户“用户名”

(用用户名替换“用户名”)。

创建一个共享网络文件夹并记住 \"SERVER-NAME"\"SHAREDFOLDERNAME" 中的路径。

将“SERVER-NAME”替换为您的服务器名称,将“SHAREDFOLDERNAME”替换为您的特定共享文件夹名称。在 Exchange Server 命令行界面(命令行界面)上,使用命令 Get-Mailbox 获取您在 Exchange 服务器中拥有的所有邮箱,然后您可以从那里选择要导出其 .pst 文件的邮箱。接下来,在 CLI 上,键入:

New-MailboxExportRequest –邮箱“USERNAME” –FilePath \"SERVER-NAME"\"SHAREDFOLDERNAME"\"PSTFILENAME".pst

再次记住将“SERVER-NAME”和“USERNAME”替换为您的服务器名和要导出的特定邮箱的用户名,否则会发生错误。将“PSTFILENAME”替换为您要保存文件的名称。之后,您可以检查共享文件夹,您会注意到文件的大小在增加或使用命令:Get-MailboxExportRequest -Mailbox "SPECIFICUSERNAME" | 格式表 -wrap -autosize

查看该过程是否已完成。如果完成,它将在状态栏中显示为“已完成”。如果没有,它将指示“排队”。

于 2019-02-02T09:41:44.643 回答