Welcome to TechNet Blogs Sign in | Join | Help

Как вызывать команды Exchange Management Shell из C#

Иногда возникает необходимость вызывать команды Exchange Management Shell из кода. Например, вы можете управлять транспортными агентами из вашего собственного кода, да и вообще этому можно придумать множество применений

  • Создадим новый консольный проект
  • Добавим reference на сборку System.Management.Automation.dll (обычно в C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0\)

Следующий пример кода выводит список транспортных агентов начинающихся с буквы “J” – эквивалентно вызову Get-TransportAgent –Identity “J*”

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using System.Management.Automation;
using System.Management.Automation.Host;
using System.Management.Automation.Runspaces;

namespace CallExchangeManagementShellCommands
{
    class Program
    {
        static void Main(string[] args)
        {
            // Подключаем команды для работы с Exchange
            RunspaceConfiguration runspaceConfig = RunspaceConfiguration.Create();
            PSSnapInException snapInException = null;
            runspaceConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out snapInException);

            Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfig);
            runspace.Open();

            // Создаем pipeline в рамках которого будут выполняться команды
            Pipeline pipeline = runspace.CreatePipeline();

            // Создаем новую команду
            Command command1 = new Command("Get-TransportAgent");
            
            // Добавляем к ней нужные параметры
            command1.Parameters.Add(new CommandParameter("Identity","J*"));

            // Добавляем команду к pipeline
            pipeline.Commands.Add(command1);

            // Вызываем команду и получаем список с результатом выполнения команды
            Collection<PSObject> command1Results = pipeline.Invoke();

            // Пробегаемся по результатам и выводим нужные на экран
            foreach (var result in command1Results)
            {
                Console.WriteLine(String.Format("Agent \"{0}\" Enabled={1}", 
                    result.Properties["Identity"].Value, 
                    result.Properties["Enabled"].Value));
            }
        }
    }
}
Published Tuesday, June 09, 2009 3:43 PM by Stanislav Chistyakov
Filed under:

Comments

No Comments

Anonymous comments are disabled
 
Page view tracker