c#使用新的邮箱ExportRequest备份Exchange邮箱,并检查状态是否已完成

c#使用新的邮箱ExportRequest备份Exchange邮箱,并检查状态是否已完成,c#,C#,我希望你能帮助我。 我正在通过Powershell备份Exchange邮箱,库系统.Management.Automation.Runspaces集成在C#中。一切都很好。我的问题是,我不知道导出何时完成,因为之后我必须在Exchange服务器上删除该请求。 以下是我到目前为止的源代码: public async Task<string> BackupMailboxAsync(IUser user, string path) {

我希望你能帮助我。 我正在通过Powershell备份Exchange邮箱,库系统.Management.Automation.Runspaces集成在C#中。一切都很好。我的问题是,我不知道导出何时完成,因为之后我必须在Exchange服务器上删除该请求。 以下是我到目前为止的源代码:

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();
}
但不幸的是,这不起作用。也许你们中的一个曾经有过同样的问题。提前感谢您的帮助。 这是我在这里的第一个帖子,请宽容我。:)

问候