【问题标题】:Running a Sitecore Powershell script from code从代码运行 Sitecore Powershell 脚本
【发布时间】:2016-10-17 16:18:13
【问题描述】:

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

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

有什么方法可以实现吗?经典 Powershell 脚本的规则是否适用于 Sitecore 版本?

【问题讨论】:

  • 我也很好奇你在建造什么。也许它可以完全内置在 SPE 中。您可以将一些规则应用于脚本和脚本库。

标签: c# powershell sitecore


【解决方案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 的引用。

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

您可以在这篇博文中了解更多关于Using PowerShell Console for Sitecore in Your Own Code的信息

更新:

要创建“脚本项目”,请使用以下模板创建项目:

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

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

更新 2:

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

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

【讨论】:

  • 谢谢,稍后再试!
  • 如何将脚本保存为“脚本项”?
  • 谢谢。我马上就要走了,我会放假一周,但我回来后一定会试试你的答案!
  • @EmanueleCiriachi 答案已更新为命名空间,它与原始文章有所不同,因此可能是它抱怨的原因(我总是使用 Resharper,所以不要总是看它们!)
  • 啊抱歉,我误会了。 SPE 4.1 是使用 .Net Framework 4.5.2 构建的,因此您需要更改项目的目标框架(或者可能旧版本的 SPE 是使用 4.5 构建的,不确定)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 2019-12-02
  • 2019-09-30
  • 2021-09-11
  • 1970-01-01
相关资源
最近更新 更多