В предыдущей своей статье «Работа с 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.

Комментарии

trackback

progg.ru  (http://progg.ru/Блог-Ильи-Бойко-Работа-с-PowerShell-из-SharePoint)

23.01.2010 2:42:29

Блог Ильи Бойко: Работа с PowerShell из SharePoint

Thank you for submitting this cool story - Trackback from progg.ru

Иван

Иван

21.05.2010 17:36:50

А не подскажите как победить "SecurityException was unhandled by user code" при выполнении функции  runspace.Open();


    var runspace = RunspaceFactory.CreateRunspace();
    runspace.Open();

Илья Бойко

Илья Бойко  (http://bkilya.ru/)

23.05.2010 4:38:33

Иван

Попробуйте настроить asp.net как описано в этой статье:
blogs.msdn.com/.../...-and-hosting-powershell.aspx

Я так понимаю вы запускаете код из под SharePoint?

Букмекер

Букмекер  (http://www.strategya.com/)

19.06.2010 17:00:29

Если честно, сложно с первого раза разобраться.. Хотя написано все доступно и понятно. Спасибо буду пробовать

Добавить комментарий


(Отображает Gravatar)

biuquote
  • Комментарий
  • Предпросмотр
Loading



О блоге

Добро пожаловать в блог Ильи Бойко, здесь вы найдете статьи и ссылки по .NET, SharePoint, SQL Server и RoR.

Photostream