Использование PowerShell из C#
PowerShell предоставляет разработчикам огромные возможности по управлению операционной системой и серверными программными продуктами. Только PowerShell может использоваться для управления Exchange Server 2010, который является основным компонентом программы Microsoft Live@edu.
В настоящий момент мы ведем разработку мета-сервиса, который позволит применять стандартные методы веб-сервисов для управления всеми компонентами Live@edu, однако для того, чтобы понимать, как работает веб-сервис, создавая пользователей, группы и выполняя настройки, предлагаю убедиться, что доступ к PowerShell из C# действительно очень удобен и прост.
1. Добавление ссылки на сборку
Необходимо добавить ссылку на сброку System.Management.Automation. Она располагается в каталоге C:Program FilesReference AssembliesMicrosoftWindowsPowerShellv1.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();
Ссылки:
- Исходный сценарий был опубликован в блоге http://www.codeproject.com/KB/cs/HowToRunPowerShell.aspx?df=100&forumid=402039&exp=0&select=2164398 .
- Возможность асинхронного запуска также рассматривается в статье автора http://www.codeproject.com/KB/threads/AsyncPowerShell.aspx .
- PowerShell в WikiPedia — http://ru.wikipedia.org/wiki/Windows_PowerShell .