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

.net 将邮箱从Exchange Server导出到PST文件,.net,vb.net,powershell,outlook,exchange-server,.net,Vb.net,Powershell,Outlook,Exchange Server,我正在尝试将(任何用户的)邮箱从Exchange 2010服务器导出到PST文件。归档此文件的最佳方式是什么 首先我看的是COM互操作模型。但这似乎只能导出当前登录到Outlook的用户的邮箱。还是我遗漏了什么?我试过这个: Dim app As New Outlook.Application() Dim ns As Outlook.NameSpace = app.GetNamespace("MAPI") ns.AddStore("C:\backup.pst") Dim backupFolder

我正在尝试将(任何用户的)邮箱从Exchange 2010服务器导出到PST文件。归档此文件的最佳方式是什么

首先我看的是COM互操作模型。但这似乎只能导出当前登录到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函数:
newmailboxexportrequest
遗憾的是,我找不到一个方法从.NET调用这个。有没有可能从.NET中调用它


或者我是否需要使用任何其他库从Exchange导出文件?(可能使用POP3获取所有邮件并将其转换为PST?

您可以使用System.Management.Automation和System.Management.Automation.Runspaces在C#中执行Powershell命令

一个非常有限的例子:

int-getmilisons()
{
使用(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();
返回结果!=null&&result.Any()?result.First().Members[“毫秒”]。值为Int32???0:0;
}
}  
最棘手的部分是,结果总是以
ICollection
的形式返回,您必须时刻关注抛出的异常和空值。

您可以使用它-作为域用户运行代码,该域用户可以访问有问题的邮箱并调用。然后,您可以使用
RDOSession.Stores.GetSharedMailbox
打开其他用户的邮箱。拥有该对象后,您将能够访问以
RDOStore.IPMRootFolder
开头的所有文件夹和邮件

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

要复制所有文件夹,请使用以下方法

foreach (RDOFolder sourceFolder in ExchangeStore.IPMRootFolder.Folders)
{
  sourceFolder.CopyTo(PstStore.IPMRootFolder);
}

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

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

(将“用户名”替换为用户名)

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

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

新建邮箱ExportRequest–邮箱“用户名”-文件路径\“服务器名”\“共享文件夹名”\“PSTFILENAME”.pst

再次记住用您的服务器名和要导出的特定邮箱的用户名替换“SERVER-NAME”和“USERNAME”,否则将发生错误。将“PSTFILENAME”替换为要保存文件的名称。然后,您可以检查共享文件夹,您会注意到文件的大小在增加,或者使用以下命令: 获取邮箱ExportRequest-邮箱“SPECIFICUSERNAME”|格式表-换行-自动调整大小

查看流程是否完成。如果完成了,它将在状态栏中显示为“已完成”。如果不是,它将指示“排队”