Считается ли плохой практикой (или есть конкретные причины этого не делать) создание нового RunSpace в пользовательском командлете c #?Например, у меня есть пользовательский командлет, как показано ниже, и мне нужно вызвать существующий командлет, и мне интересно, возникнут ли какие-либо потоки или другие проблемы с этим.
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);
}
}
}
В частности, я хочу создать SPSite для SharePoint 2010 и указать конкретную базу данных контента для SPSite.Существует перегрузка для SPSitesCollection.Add (), которая принимает SPContentDatabase в качестве параметра, но это внутренний метод.Я хочу создать RunSpace, чтобы разрешить вызов командлета New-SPSite (который позволяет указывать новую базу данных контента) и, следовательно, иметь возможность создавать сайт с определенной базой данных контента.
Я обнаружил, http://msdn.microsoft.com/en-us/library/ms714873(v=VS.85).aspx указывает, что вы можете вызывать командлеты из командлетов, но New-SPSite (фактический класс SPCmdletNewSite) также является внутренним и не может быть вызван напрямую.