2013-08-22 2 views
1

Я пишу приложение WinForms на C#, которое в конечном итоге перенесет почтовые ящики Exchange 2010 в расположение файла (pstStore) в формате PST. Форма состоит из набора текстовых полей, комбинированных ящиков и переключателей. Команда, которая будет выполнять эту работу, - New-MailboxExportRequest -Mailbox ... -FilePath ... после нажатия кнопки.Pass C# Variables to Powershell Engine

Я получаю доступ к оболочке Exchange Management и с использованием рабочей области для передачи командлета и параметров. В параметрах (-Mailbox и -FilePath) я хочу передать значения текстовых полей и комбинированных полей. Как это сделать на C#?

FYI ... Я использую тот же код для заполнения комбинированного поля со всеми почтовыми ящиками из базы данных обмена. Поэтому код работает для этой цели, поэтому я подумал, что могу использовать его для передачи некоторых переменных с помощью метода 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(); 
    } 

ответ

1

При вызове перегрузки AddParameter, которая принимает два параметра, то второй из них является значение. Просто используйте имя переменной C#, например:

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

Прямо сейчас, похоже, это трюк. У меня были переменные в неправильном объеме. Как только я установил, что параметры были исключены. Еще многое предстоит сделать, чтобы он не был слишком неуклюжим, но, спасибо за ясность. – user2704769