사용자 지정 C# cmdlet에 새로운 RunSpace를 만들지 않는 것이 좋지 않은가 (또는 특별한 이유가 있습니까?)? 예를 들어 아래와 같이 사용자 지정 Cmdlet을 보유하고 있으며 기존 cmdlet을 호출해야하며이 작업을 수행하는 데 스레딩이나 기타 문제가 있는지 궁금합니다.커스텀 C# cmdlet을 사용하여 새로운 RunSpace를 만드는 것은 나쁜 습관입니까?
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에 대한 특정 콘텐츠 데이터베이스를 지정하려고합니다. SPContentDatabase를 매개 변수로 사용하는 SPSitesCollection.Add()에 대한 오버로드가 있지만 이는 내부 메서드입니다. RunSpace를 만들어 New-SPSite cmdlet (새 콘텐츠 db 지정 가능)을 호출 할 수있게하고 특정 콘텐츠 데이터베이스로 사이트를 만들 수있게하려고합니다.
http://msdn.microsoft.com/en-us/library/ms714873(v=VS.85).aspx은 cmdlet에서 cmdlet을 호출 할 수 있음을 나타내지 만 New-SPSite (실제 클래스 SPCmdletNewSite)도 내부적이므로 직접 호출 할 수 없다는 것을 나타냅니다.
당신이 추가 실행 영역이 필요한 이유는 명확하지 않다. 현재로드 된 스냅인에서 현재 스냅 샷을 제거하지 않으려면 그 이유가 무엇입니까? 실제 코드 또는 의사 코드입니까? 후자의 경우 어떤 부분이 의사입니까? 특히 SPSitesCollection.Add()는 언급되었지만 코드에서 사용되지 않습니다 (미안하지만 방금 놓친 경우). –
제목에 질문에 답하면 (관심있는 실제 질문이 확실하지 않습니다.) 새로운 실행 영역을 만드는 이유가 있다면 나쁜 습관이라고 생각하지 않습니다. 이유가 없다면 그것은 나쁜 습관 일뿐 아니라 새로운 작업 공간은 저렴하지 않습니다. –
감사의 말 로마 - 실제 클래스 구현 (C#에서)이 내부 밀폐 된 New-SPSite cmdlet을 호출하려고합니다. "내부 밀폐 클래스 SPCmdletNewSite : SPNewCmdletBase"입니다. cmdlet 클래스에서 Invoke를 직접 호출 할 수 없기 때문에 위에서 설명한대로 별도의 RunSpace에서 cmdlet을 호출하여 실행할 수 있거나 작성중인 문제를 찾으려고합니다. 다른 대안이 있다면 알려주십시오. C#에서 새로운 사용자 지정 cmdlet을 만드는 것에 비교적 익숙합니다. –