Как вызывать команды 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));
}
}
}
}