Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从代码运行Sitecore Powershell脚本_C#_Powershell_Sitecore - Fatal编程技术网

C# 从代码运行Sitecore Powershell脚本

C# 从代码运行Sitecore Powershell脚本,c#,powershell,sitecore,C#,Powershell,Sitecore,我已经安装了流行的Sitecore插件,到目前为止我很喜欢它 我希望能够在C#中以编程方式调用特定的脚本(如中,作为用户输入的结果),但我找不到任何有效的资源为我指明正确的方向 有没有办法做到这一点?经典Powershell脚本的规则是否适用于Sitecore版本?您可以使用以下命令从自己的代码直接调用任何Powershell脚本 使用Cognifide.PowerShell.Core.Host; 使用Sitecore.Data.Items; 名称空间MyProject { 公共类TestSPE

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

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


有没有办法做到这一点?经典Powershell脚本的规则是否适用于Sitecore版本?

您可以使用以下命令从自己的代码直接调用任何Powershell脚本

使用Cognifide.PowerShell.Core.Host;
使用Sitecore.Data.Items;
名称空间MyProject
{
公共类TestSPE
{
公共无效调用()
{
使用(ScriptSession ScriptSession=ScriptSessionManager.NewSession(“默认”,true))
{
Item speScriptItem=Sitecore.Context.Database.GetItem(“/path或id/to spe Item”);
字符串脚本=speScriptItem[“脚本”];
如果(!string.IsNullOrEmpty(脚本))
scriptSession.ExecuteScriptPart(脚本);
}
}
}
}
确保在项目中添加对
Cognifide.PowerShell.dll
的引用

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

你可以在这篇博文中阅读更多关于

更新:

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

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

更新2:

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

列出结果;
结果=scriptSession.ExecuteScriptPart(脚本,false);

一定要去看看,我也很好奇你在建什么。也许它可以完全构建在SPE中。有一些规则可以应用于脚本和脚本库。谢谢,稍后将尝试此操作!如何将脚本保存为“脚本项”?谢谢。我马上就要走了,我要去度假一个星期,但我回来后一定会试试你的答案@EmanueleCiriachi的答案更新了名称空间,它与原始文章有所不同,所以这可能是它抱怨的原因(我总是使用Resharper,所以不要总是看它们!)啊,对不起,我误解了。SPE 4.1是使用.Net Framework 4.5.2构建的,因此您需要更改项目的目标框架(或者SPE的旧版本可能是使用4.5构建的,不确定)