我尝试将(任何用户的)邮箱从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?)
答案 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
查看该过程是否完成。如果完成,它将在状态列中指示为“已完成”。如果不是,它将指示“已排队”。