c#使用新的邮箱ExportRequest备份Exchange邮箱,并检查状态是否已完成
我希望你能帮助我。 我正在通过Powershell备份Exchange邮箱,库系统.Management.Automation.Runspaces集成在C#中。一切都很好。我的问题是,我不知道导出何时完成,因为之后我必须在Exchange服务器上删除该请求。 以下是我到目前为止的源代码:c#使用新的邮箱ExportRequest备份Exchange邮箱,并检查状态是否已完成,c#,C#,我希望你能帮助我。 我正在通过Powershell备份Exchange邮箱,库系统.Management.Automation.Runspaces集成在C#中。一切都很好。我的问题是,我不知道导出何时完成,因为之后我必须在Exchange服务器上删除该请求。 以下是我到目前为止的源代码: public async Task<string> BackupMailboxAsync(IUser user, string path) {
public async Task<string> BackupMailboxAsync(IUser user, string path)
{
message = "Error Mailbox for user: " + user.SamAccountName + " could not be backuped";
RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
WSManConnectionInfo connectionInfo = new WSManConnectionInfo(new Uri(ExchangeConnectionUri), "http://schemas.microsoft.com/powershell/Microsoft.Exchange", (PSCredential)null);
Runspace myRunSpace = RunspaceFactory.CreateRunspace(connectionInfo);
myRunSpace.Open();
Pipeline pipeLine = myRunSpace.CreatePipeline();
Command myCommand = new Command("New-MailboxExportRequest");
myCommand.Parameters.Add("Mailbox", user.SamAccountName);
myCommand.Parameters.Add("BadItemLimit", 100);
myCommand.Parameters.Add("Priority", "Highest");
myCommand.Parameters.Add("FilePath", path + user.FirstName + "_" + user.SurName + "_" +
DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day + DateTime.Now.Hour + DateTime.Now.Minute + ".pst");
pipeLine.Commands.Add(myCommand);
try
{
PSOutput = pipeLine.Invoke();
}
catch (Exception ex)
{
message = ex.Message;
}
finally
{
myRunSpace.Dispose();
await GetStatusPSObject(PSOutput);
}
return message;
}
公共异步任务BackupMailboxAsync(IUser用户,字符串路径)
{
message=“用户邮箱错误:“+user.SamAccountName+”无法备份”;
RunspaceConfiguration rsConfig=RunspaceConfiguration.Create();
WSManConnectionInfo connectionInfo=新的WSManConnectionInfo(新Uri(ExchangeConnectionUri),”http://schemas.microsoft.com/powershell/Microsoft.Exchange“,(PSCredential)null);
Runspace myRunSpace=RunspaceFactory.CreateRunspace(connectionInfo);
myRunSpace.Open();
Pipeline Pipeline=myRunSpace.CreatePipeline();
Command myCommand=new命令(“new-MailboxExportRequest”);
myCommand.Parameters.Add(“邮箱”,user.SamAccountName);
myCommand.Parameters.Add(“BadItemLimit”,100);
myCommand.Parameters.Add(“优先级”、“最高”);
myCommand.Parameters.Add(“文件路径”,路径+user.FirstName+“”+user.姓氏+“”+
DateTime.Now.Year+DateTime.Now.Month+DateTime.Now.Day+DateTime.Now.Hour+DateTime.Now.Minute+“.pst”);
pipeLine.Commands.Add(myCommand);
尝试
{
PSOutput=pipeLine.Invoke();
}
捕获(例外情况除外)
{
消息=例如消息;
}
最后
{
Dispose();
等待GetStatusPSObject(PSOutput);
}
返回消息;
}
我想我可以这样查询ps输出:
private async Task GetStatusPSObject(Collection<PSObject> PSOutput)
{
var waitTask = Task.Run(async () =>
{
foreach (PSObject outputItem in PSOutput)
{
foreach (PSPropertyInfo psInfo in outputItem.Properties)
{
if(psInfo.Name.Equals("status"))
{
if(psInfo.Value.Equals("completed"))
{
//Get - MailboxExportRequest | Remove - MailboxExportRequest
//Delete Mailbox
completed = true;
}
else
{
await Task.Delay(1000);
}
}
}
}
});
if (waitTask != await Task.WhenAny(waitTask, Task.Delay(1000)))
throw new TimeoutException();
}
专用异步任务GetStatusPSObject(集合PSOutput)
{
var waitTask=Task.Run(异步()=>
{
foreach(PSOutput中的PSObject输出项)
{
foreach(输出项属性中的PSPropertyInfo psInfo)
{
if(psInfo.Name.Equals(“状态”))
{
if(psInfo.Value.Equals(“已完成”))
{
//Get-MailboxExportRequest | Remove-MailboxExportRequest
//删除邮箱
完成=正确;
}
其他的
{
等待任务。延迟(1000);
}
}
}
}
});
if(waitTask!=wait Task.wheny(waitTask,Task.Delay(1000)))
抛出新的TimeoutException();
}
但不幸的是,这不起作用。也许你们中的一个曾经有过同样的问题。提前感谢您的帮助。
这是我在这里的第一个帖子,请宽容我。:)
问候