从代码运行Sitecore Powershell脚本

时间:2016-10-17 16:18:13

标签: c# powershell sitecore

我已经安装了流行的Search Sitecore插件,到目前为止我很喜欢它。

我希望能够在C#中以编程方式调用特定脚本(例如,作为用户输入的结果),但我找不到任何有效的资源指向我正确的方向。

有没有办法实现这个目标?经典Powershell脚本的规则是否适用于Sitecore版本?

1 个答案:

答案 0 :(得分:7)

您可以使用以下

从您自己的代码直接调用任何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的引用。

如果您的脚本未存储在Sitecore中的PowerShell Script项目上,那么您将传入一个包含您希望运行的SPE命令和脚本的字符串。

您可以在此博文中了解有关Using PowerShell Console for Sitecore in Your Own Code

的更多信息

<强>更新

要创建&#34;脚本项&#34;,请使用以下模板创建项目:

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

这将为您提供Script body您可以放置​​代码的位置。您可以在/sitecore/system/Modules/PowerShell/Script Library下的模块脚本库中找到默认SPE脚本的示例。

更新2:

要从脚本中获取返回值,请调用false传递方法的stringOutput参数:

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