gpt4 book ai didi

sharepoint - 从自定义 C# cmdlet 中创建新的 RunSpace 是不好的做法吗?

转载 作者:行者123 更新时间:2023-12-02 23:48:38 25 4
gpt4 key购买 nike

在自定义 c# cmdlet 中创建新的 RunSpace 是否被认为是不好的做法(或者是否有特定的理由不这样做)?例如,我有一个自定义 Cmdlet,如下所示,需要调用现有的 cmdlet,我想知道这样做是否会出现任何线程或其他问题。

 public class SPCmdletNewBusinessSite : SPNewCmdletBase<SPSite>
{

...
private void ExecuteRunspaceCommand()
{
Runspace runspace = RunspaceFactory.CreateRunspace();
PSSnapInException snapInError;
runspace.RunspaceConfiguration.AddPSSnapIn("Microsoft.SharePoint.PowerShell", out snapInError);
runspace.ThreadOptions = PSThreadOptions.Default;
runspace.Open();

Pipeline pipeline = runspace.CreatePipeline();

Command newSiteProc = new Command("New-SPSite");
newSiteProc.Parameters.Add(new CommandParameter("Url", "http://goober-dc/9393"));
newSiteProc.Parameters.Add(new CommandParameter("OwnerAlias", "GOOBER\\Administrator"));
newSiteProc.Parameters.Add(new CommandParameter("Template", "STS#1"));
newSiteProc.Parameters.Add(new CommandParameter("Language", "1033"));
newSiteProc.Parameters.Add(new CommandParameter("ContentDatabase", "Site_Specific_ContentDB"));

pipeline.Commands.Add(newSiteProc);
Collection<PSObject> results = new Collection<PSObject>();

results = pipeline.Invoke();
foreach (PSObject obj in results)
{
base.WriteObject(((SPSite)obj.BaseObject).RootWeb.Title);
}

}
}

具体来说,我想创建一个 SharePoint 2010 SPSite 并为 SPSite 指定一个特定的内容数据库。 SPSitesCollection.Add() 有一个重载,它接受一个 SPContentDatabase 作为参数,但这是一个内部方法。我想创建 RunSpace 以启用调用 New-SPSite cmdlet(允许指定新的内容数据库),因此能够创建具有特定内容数据库的站点。

我找到了 http://msdn.microsoft.com/en-us/library/ms714873(v=VS.85).aspx表示您可以从 cmdlet 中调用 cmdlet,但 New-SPSite(实际类 SPCmdletNewSite)也是内部的,不能直接调用。

最佳答案

如果要在 cmdlet 中调用另一个 cmdlet,通常的做法是使用嵌套管道而不是新的运行空间。这使您可以使用 cmdlet 的范围,从而可以访问相同的变量和上下文。新的运行空间是完全隔离的,因此重量更大,但如果您不污染调用范围,则可能需要。我认为您可能想要一个嵌套的管道,这样您就不必重新加载 sharepoint 管理单元(我假设在您调用新的 sharepoint cmdlet 时它已经加载了。)

您可以在 cmdlet 中使用此方法。这是一个嵌套管道,因为您的命令已经在管道中运行。

var pipe = Runspace.DefaultRunspace.CreateNestedPipeline(...);
pipe.Invoke()

http://msdn.microsoft.com/en-us/library/system.management.automation.runspaces.runspace.createnestedpipeline(v=VS.85).aspx

关于sharepoint - 从自定义 C# cmdlet 中创建新的 RunSpace 是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8038992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com