Использование PowerShell из C#
PowerShell предоставляет разработчикам огромные возможности по управлению операционной системой и серверными программными продуктами. Только 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();
Ссылки:
- Исходный сценарий был опубликован в блоге https://www.codeproject.com/KB/cs/HowToRunPowerShell.aspx?df=100&forumid=402039&exp=0&select=2164398 .
- Возможность асинхронного запуска также рассматривается в статье автора https://www.codeproject.com/KB/threads/AsyncPowerShell.aspx .
- PowerShell в WikiPedia - https://ru.wikipedia.org/wiki/Windows_PowerShell .
Technorati Теги: PowerShell,C#