Использование PowerShell из C#

imagePowerShell предоставляет разработчикам огромные возможности по управлению операционной системой и серверными программными продуктами. Только PowerShell может использоваться для управления Exchange Server 2010, который является основным компонентом программы Microsoft Live@edu.

В настоящий момент мы ведем разработку мета-сервиса, который позволит применять стандартные методы веб-сервисов для управления всеми компонентами Live@edu, однако для того, чтобы понимать, как работает веб-сервис, создавая пользователей, группы и выполняя настройки, предлагаю убедиться, что доступ к PowerShell из C# действительно очень удобен и прост.

1. Добавление ссылки на сборку

Необходимо добавить ссылку на сброку System.Management.Automation. Она располагается в каталоге C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0.

2. Подключение типов

Добавьте ссылки на типы в код C#.

using System.Collections.ObjectModel;
using System.Management.Automation;
using System.Management.Automation.Runspaces;

3. Метод запуска команды (сценария)

Добавьте функцию, который будет выполнять команду PowerShell и возвращать результат в виде строки.

static string RunScript(string scriptText)
        {
            Runspace runspace = RunspaceFactory.CreateRunspace(); // создание процесса

            runspace.Open(); // открытие процесса

            Pipeline pipeline = runspace.CreatePipeline(); // создание конвейера

            pipeline.Commands.AddScript(scriptText); //добавление сценария

            pipeline.Commands.Add("Out-String"); // эта команда форматирует вывод. Без нее возвращаются реальные объекты.

            Collection<PSObject> results = pipeline.Invoke(); // запуск сценария

            runspace.Close(); // закрыте процесса

            StringBuilder stringBuilder = new StringBuilder(); // конвертация результата в одну строку с использованием StringBuilder;
            foreach (PSObject obj in results)
            {
                stringBuilder.AppendLine(obj.ToString());
            }

            return stringBuilder.ToString(); // возврат значения
        }

4. Использование

Выполните команду Get-Process и посмотрите результат.

string result = RunScript("Get-Process");
Console.WriteLine(result);
Console.ReadLine();

Ссылки:

Technorati Теги: PowerShell,C#