【发布时间】:2013-08-27 17:51:54
【问题描述】:
我正在编写一个 c# Windows 窗体应用程序,以将 Exchange 2010 邮箱迁移到服务器上 .pst 格式的文件位置。我使用了 Powershell SDK (Runspace05) 中的一个示例来访问交换 cmdlet (Get-Mailbox),并毫无问题地使用用户邮箱填充组合框。
我遇到问题的部分是让 New-MailboxExportRequest cmdlet(执行导出的 cmdlet)运行,并能够返回它的对象并在列表框控件中显示它们。我错过了什么?提前感谢您的帮助。
代码:
InitialSessionState iss = InitialSessionState.CreateDefault();
PSSnapInException warning;
iss.ImportPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", out warning);
using (Runspace myrunspace = RunspaceFactory.CreateRunspace(iss))
{
myrunspace.Open();
using (PowerShell powershell = PowerShell.Create())
{
var mailbox = cmbEmailUserName.Text;
var pstFile = txtFileSaveLocation.Text;
const int badLimit = 100; //can be increased in necessary
powershell.AddCommand("Microsoft.Exchange.Management.PowerShell.E2010\\New-MailboxExportRequest");
powershell.AddParameter("Mailbox", mailbox);
powershell.AddParameter("FilePath", pstFile);
powershell.Runspace = myrunspace;
Collection<PSObject> results = powershell.Invoke();
foreach (PSObject thisResult in results)
{
lstBoxStatus.Items.Add(thisResult);
}
myrunspace.Close();
}
}
【问题讨论】:
-
你想在 ListBox 中提供什么样的信息?您想要原始对象然后格式化属性还是想要 PowerShell 生成的输出?如果是后者,则 AddCommand("Out-String") 到管道的末尾得到一个 PowerShell 格式的字符串作为结果。
-
当您在 Exchange Management Shell 中运行该命令时,它会返回一个状态...表明该命令已排队。我想在窗口中返回那个状态。
-
如果您只想查看 PowerShell 显示的状态,请在上面的最后一个 AddParameter 之后放置
powershell.AddCommand("Out-String")。您得到的结果将是一个字符串,但该字符串应该包含 PowerShell 显示的状态。
标签: c# powershell exchange-server-2010