Запуск сценария Powershell для ядра сайта из кода

#c# #powershell #sitecore

#c# #powershell #sitecore

Вопрос:

Я установил популярный плагин Sitecore для консоли Powershell, и пока мне это нравится.

Я хотел бы иметь возможность программно вызывать определенный скрипт на C # (например, как следствие пользовательского ввода), но я не смог найти ни одного действительного ресурса, указывающего мне правильное направление.

Есть ли какой-либо способ добиться этого? Применяются ли правила для классических сценариев Powershell к версии Sitecore?

Комментарии:

1. Обязательно проверьте sitecore.stackexchange.com

2. Мне также любопытно, что вы создаете. Возможно, он может быть полностью встроен в SPE. Существуют правила, которые можно применять к сценариям и библиотекам сценариев.

Ответ №1:

Вы можете напрямую вызвать любой сценарий PowerShell из своего собственного кода, используя следующее

 using Cognifide.PowerShell.Core.Host;
using Sitecore.Data.Items;

namespace MyProject
{
    public class TestSPE
    {
        public void Invoke()
        {
            using (ScriptSession scriptSession = ScriptSessionManager.NewSession("Default", true))
            {
                Item speScriptItem = Sitecore.Context.Database.GetItem("/path-or-id/to-spe-item");
                string script = speScriptItem["Script"];
                if (!string.IsNullOrEmpty(script))
                    scriptSession.ExecuteScriptPart(script);
            }
        }
    }
}
  

Обязательно добавьте ссылку на Cognifide.PowerShell.dll в свой проект.

Если ваш сценарий не хранится в PowerShell Script элементе в Sitecore, тогда вы передаете строку с командами SPE и сценарием, которые хотите запустить.

Вы можете прочитать больше в этом сообщении в блоге об использовании консоли PowerShell для Sitecore в своем собственном коде

Обновить:

Чтобы создать «элемент сценария», создайте элемент, используя шаблон из:

 /sitecore/templates/Modules/PowerShell Console/PowerShell Script
  

Это предоставит вам Script body , куда вы можете поместить свой код. Вы можете найти примеры сценариев SPE по умолчанию в библиотеке сценариев модулей ниже /sitecore/system/Modules/PowerShell/Script Library .

Обновление 2:

Чтобы получить возвращаемые значения из скрипта, вы вызываете для передачи false stringOutput параметра в методе:

 List<object> results; 
results = scriptSession.ExecuteScriptPart(script, false); 
  

Комментарии:

1. Спасибо, попробую это позже!

2. Как мне сохранить сценарий как «элемент сценария»?

3. Спасибо. Я скоро ухожу и буду в отпуске на неделю, но я обязательно попробую ваш ответ, когда вернусь!

4. @EmanueleCiriachi Ответ обновлен с пространствами имен, он изменился по сравнению с исходной статьей, поэтому, возможно, именно поэтому он жалуется (я всегда использую Resharper, поэтому не всегда смотрите на них!)

5. Ах, извините, я неправильно понял. SPE 4.1 собран с использованием .Net Framework 4.5.2, поэтому вам нужно будет изменить целевую структуру вашего проекта (или, возможно, более старые версии SPE были построены с 4.5, не уверен)