#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, не уверен)