В предыдущей своей статье «Работа с SharePoint из PowerShell» я написал об основах работы с SharePoint из PowerShell, в этой я бы хотел подойти к вопросу с обратной стороны и показать, как можно выполнять скрипты PowerShell в веб-частях SharePoint.
Описанные методы работы с PowerShell применимы и к другим типам приложений: Win Forms, ASP.NET, и т.д.
Веб-часть от PowerShellToys
PowerShellToys SharePoint PowerShell Web Part - это прекрасный пример использования PowerShell совместно с SharePoint, и в принципе для решения многих задач этой веб-части вам будет достаточно.
После установки этой веб-части вы получаете возможность в рамках данной части исполнять скрипты PowerShell, удобно работать с объектной моделью SharePoint и выводить результаты ваших скриптов в веб-интерфейс вашего портала используя PowerShell ASP. Вот несколько примеров использования данного решения: http://www.powershelltoys.com/demos/?smenu
Скачать решение можно тут:
http://www.powershelltoys.com/download.aspx?id=PowerShellWebPart
В версии скачанной мною 17 января 2010 была ошибка, в WSP некорректно указана версия сборки PowerShellToys.PowerShellWebPart, корректный WSP файл вы можете скачать здесь:
http://bkilya.ru/files/Working-with-PowerShell-form-SharePoint/PowerShellToys.PowerShellWebPart.zip
Подробнее о данном и других решения для PowerShell разработанных этой командой вы можете прочитать на сайте : http://www.powershelltoys.com
Запуск скриптов PowerShell из SharePoint
Я привожу лишь листинг кода позволяющего выполнить скрипт PowerShell, чтобы посмотреть как это работает в виде веб-части вы можете скачать исходный код и инсталляцию подготовленного мною примера: http://bkilya.ru/files/Working-with-PowerShell-form-SharePoint/PowerShell.Examples.zip
Для работы с PowerShell необходимо добавить в проект ссылку на библиотеку System.Management.Automation, библиотека располагается в папке: C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1
Подключим следующие пространства имен:
using System.Collections.ObjectModel;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
Теперь своем проекте мы можем использовать PowerShell, рассмотрим метод:
/// <summary>
/// Выполняет скрипт PowerShell и возвращает результат в виде строки.
/// </summary>
/// <param name="scriptText">Скрипт PowerShell.</param>
/// <returns>Строка с результатом выполнения скрипта.</returns>
private string RunScript(string scriptText)
{
// Создадим и запустим процесс.
var runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
// Создадим конвейер.
var pipeline = runspace.CreatePipeline();
// Задаем скрипт который хотим выполнить.
pipeline.Commands.AddScript(scriptText);
pipeline.Commands.Add("Out-String");
// Выполняем скрипт и закрываем процесс.
var scriptResults = pipeline.Invoke();
runspace.Close();
// Собираем результат выполнения в одну строку
var stringBuilder = new StringBuilder();
foreach (var obj in scriptResults)
{
stringBuilder.AppendLine(obj.ToString());
}
// Возвращаем результат выполнения скрипта.
return stringBuilder.ToString();
}
Пример работы с PowerShell взят тут: http://www.codeproject.com/KB/cs/HowToRunPowerShell.aspx?df=100&forumid=402039&exp=0&select=2164398
Другие задачи
Желание использовать PowerShell из SharePoint кажется немного странным, однако такой подход может оказаться удобен в реализации веб-интерфейсов управления серверными решениями на платформе Microsoft (Windows Server, SharePoint, Exchange, Project Server и т.д.).
Кто знает может однажды мы получим функциональность PowerGUI в виде веб-части SharePoint.