将邮箱从Exchange Server导出到PST文件

时间:2012-12-10 10:12:11

标签: .net vb.net powershell outlook exchange-server

我尝试将(任何用户的)邮箱从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?

3 个答案:

答案 0 :(得分:1)

您可以使用Redemption - 将您的代码作为可以访问相关邮箱的域用户运行并致电RDOSession.LogonExchangeMailbox。然后,您可以使用RDOSession.Stores.GetSharedMailbox打开其他用户的邮箱。获得RDOStore对象后,您将能够访问以RDOStore.IPMRootFolder开头的所有文件夹和邮件。

要复制到PST存储,您可以使用RDOSession.Stores.AddPstStore添加新的或现有的PST文件。

使用以下

之类的内容复制所有文件夹
foreach (RDOFolder sourceFolder in ExchangeStore.IPMRootFolder.Folders)
{
  sourceFolder.CopyTo(PstStore.IPMRootFolder);
}

答案 1 :(得分: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>的形式返回,并且您必须始终关注异常抛出和空值。

答案 2 :(得分:0)

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

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

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

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

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

New-MailboxExportRequest –邮箱“ USERNAME” –FilePath \“服务器名称” \“ SHAREDFOLDERNAME” \“ PSTFILENAME” .pst

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

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