none
Помогите преобразовать PowerShell в C# RRS feed

  • Вопрос

  • Добрый день.

    В разработке я полный новичок. Знаю PowerShell и только.

    Встала задача написать код в Visual Studio на C#. Помогите с преобразованием.

    Код на PowerShell:

    [System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
    $web = Get-SPWeb "Имя сайта"
    $list = $web.Lists["Имя списка"]
    $col=$list.Items
    $col | % {$list.GetItemById($_.Id).Delete()}
    $web.Dispose()

    12 октября 2016 г. 7:39

Ответы

Все ответы

  • как вариант, запускать этот сценарий из программы через System.Management.Automation

    http://www.codeproject.com/Articles/18229/How-to-run-PowerShell-scripts-from-C

    12 октября 2016 г. 8:49
  • как вариант, запускать этот сценарий из программы через System.Management.Automation

    http://www.codeproject.com/Articles/18229/How-to-run-PowerShell-scripts-from-C

    Отчасти помогло. Но появились ошибки уже в этой функции. Поможете исправить?

    1. добавил Reference на System.Management.Automation

    2. добавил код в проект:

            private 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();
                foreach (PSObject obj in results)
                {
                    stringBuilder.AppendLine(obj.ToString());
                }
    
                return stringBuilder.ToString();
            }

    Как результат начало всё ругаться начиная с <PSObject>. Что я сделал не так?

    Дополню, первоначальную задачу - этот скрипт я должен запустить по нажатию кнопки на веб-странице.


    12 октября 2016 г. 9:49
  • Не компилируется или выдает ошибку при выполнении? 

    Директиву using System.Management.Automation; в начале файла добавили?

    У меня все компилируется и работает нормально (проверял сценарий GetProcess, список процессов выводится)

    Добавлено: в PSObject буква О - большая должна быть, у вас в 1 раз маленькая
    • Изменено VadimTagil 12 октября 2016 г. 10:28 добавлено
    12 октября 2016 г. 10:25
  • Не компилируется или выдает ошибку при выполнении? 

    Директиву using System.Management.Automation; в начале файла добавили?

    У меня все компилируется и работает нормально (проверял сценарий GetProcess, список процессов выводится)

    Добавлено: в PSObject буква О - большая должна быть, у вас в 1 раз маленькая

    С программой проблем нет, компилируется и работает и выполняет нужный скрипт.

    Проблема возникает, когда пытаюсь добавить описанный в статье код в свою программу (webpart).С PSObject разобрался - спасибо. Осталась одна ошибка. Ругается на такую строку:

    StringBuilder stringBuilder = new StringBuilder();
    И это решилось добавлением using System.Text;
    12 октября 2016 г. 10:53
  • Встроил код PowerShell в string.

    Вызвал RunScript.

    Получил ошибку: Инициализатор типа "System.Management.Automation.SessionStateScope" выдал исключение

    В чём может быть дело?

    Полный код, который используется:

    using System.Management.Automation;
    using System.Management.Automation.Runspaces;
    using System.Text;
    ...
    private 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();
                foreach (PSObject obj in results)
                {
                    stringBuilder.AppendLine(obj.ToString());
                }
    
                return stringBuilder.ToString();
            }
    ...
    string PSCode = "Add-PSSnapin Microsoft.SharePoint.PowerShell;[System.reflection.Assembly]::LoadWithPartialName('Microsoft.SharePoint');$web = Get-SPWeb 'http://srv-sps-app';$list = $web.Lists['Сотрудники'];$col =$list.Items;$col | % {$list.GetItemById($_.Id).Delete()};$web.Dispose()";
    RunScript(PSCode);

    12 октября 2016 г. 12:32
  • Не выполняется любой скрипт? Что в InnerException? Посмотрите права учетки, с которой сервер запускает ваше приложение.

    http://jeffmurr.com/blog/?p=142 - посмотрите в комментариях

    13 октября 2016 г. 3:12
  • Не выполняется любой скрипт? Что в InnerException? Посмотрите права учетки, с которой сервер запускает ваше приложение.

    http://jeffmurr.com/blog/?p=142 - посмотрите в комментариях


    Проверил и права и посмотрел комментарии. По ходу дела это проблема именно с SharePoint, которая не решаема. Проверил на 2010 версии - там всё работает. Спасибо за советы буду дальше изучать структуру SharePoint.
    13 октября 2016 г. 6:07