将C#变量传递给Powershell引擎

本文关键字:Powershell 引擎 变量 | 更新日期: 2023-09-27 18:28:36

我正在用C#编写一个WinForms应用程序,该应用程序最终将Exchange 2010邮箱迁移到.pst格式的文件位置(pstStore)。该表单由文本框、组合框和单选按钮的集合组成。单击按钮后,将执行的命令是New-MailboxExportRequest–Mailbox…-FilePath。

我正在访问Exchange命令行管理程序,并使用运行空间传递cmdlet和参数。在参数(-Mailbox和-FilePath)中,我想传递文本框和组合框的值。我如何在C#中做到这一点?

仅供参考…我正在使用相同的代码用exchange数据库中的所有邮箱填充组合框。因此,代码可以用于此目的,因此,我想我也可以使用它将一些变量传递到AddParameter方法中。

以下是点击事件的代码:

 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())                    
        {              powershell.AddCommand("Microsoft.Exchange.Management.PowerShell.E2010''New-MailboxExportRequest")
    powershell.AddParameter("Mailbox", "UserMailbox");
    powershell.AddParameter("FilePath", "ExchAdmin");
    powershell.AddParameter("","");
    powershell.Runspace = myrunspace;
    Collection<PSObject> results = null;
    try
    {
       results = powershell.Invoke(); //Runs the cmdlet synchronously  
    }
    catch (RuntimeException ex)
     {
        foreach (PSObject thisResult in results)
        {
           lstBoxStatus.Items.Add(thisResult); //sending the result to a status window
        }
     }                
     myrunspace.Close();
    }

将C#变量传递给Powershell引擎

当您调用接受两个参数的AddParameter重载时,第二个是值。只需使用C#变量的名称,例如:

string mailbox = _mailBoxTextBox.Text;
...
powershell.AddParameter("Mailbox", mailbox);