2016-11-16 7 views
0

일부 웹 페이지 코드에서 전원 셸 세션이 실행되는 runspace를 만들고 싶습니다. 사용자가 페이지를 열어서 열려있을 때이 실행 공간을 만들길 원합니다. 그것이 닫힐 때까지. 예를 들어 아래의 코드는 버튼 하나 클릭에 대한 것입니다. 하지만 파워 쉘 명령을 실행할 때마다 내가이 (가).net (C#)의 영구 실행 영역

"$S = new-pssesession -configurationname micros......" 

이 몇 초 정도 걸립니다 내가 어떤에서 호출 할 수 있도록 그냥이 실행 영역 및 PowerShell은 개체를 만들 수 있습니다 세션을 설정하는 것입니다 실행해야 코드를 사용할 때마다 그것을 다시 만들어야하는 코드가있는 곳입니다. 콘솔 응용 프로그램에서 응용 프로그램이 서로 다른 구조를 가지고/I는 "기본"클래스에서 삐죽 것입니다,하지만 웹 페이지를 보인다

protected void Button1_Click(object sender, EventArgs e) 
    { 

     var runspace = RunspaceFactory.CreateRunspace(); 
     runspace.Open(); 

     var powershell = PowerShell.Create(); 
     //{ 
     powershell.Runspace = runspace; 


     powershell.AddScript("Set-ExecutionPolicy Unrestricted ; $s=new-pssession -configurationname microsoft.exchange -connectionuri http://server.com/powershell -authentication kerberos ; import-pssession $s"); 
     powershell.Invoke(); 
     powershell.AddScript("get-dynamicdistributiongroup"); 
     Collection<PSObject> resultsL = powershell.Invoke(); 


     // close the runspace 
     runspace.Close(); 

     Input.Items.Clear(); 
     foreach (var dlist in resultsL) 
     { 
      Input.Items.Add(dlist.ToString()); 
     } 

     Input.DataBind(); 

그래서 내가 만들려고 것이라고 생각 MY 제안 된 솔루션 정적 인 객체를 호출하면 호출 할 수 있습니다. 나는 정적 호출을 생성함으로써 처음으로 "static powers()"구조를 실행할 것이라고 생각했지만, 이후의 호출은 메소드의 코드 섹션만을 호출 할 것이라고 생각했습니다. 그러나 나는 그것이 아주 아주 맞다는 것을 확신하지 못한다.

public static class powers 
    { 

     static public Runspace runspace = RunspaceFactory.CreateRunspace(); 
     static public PowerShell powershell = PowerShell.Create(); 

     static powers() 
     { 

      runspace.Open(); 
      powershell.Runspace = runspace; 
      powershell.AddScript("Set-ExecutionPolicy Unrestricted ; $s=new-pssession -configurationname microsoft.exchange -connectionuri http://exchangeserver.com/powershell -authentication kerberos ; import-pssession $s"); 
      var resultL = powershell.Invoke(); 

     } 

     static public Collection<PSObject> glist() 
     { 


      powershell.AddScript("get-dynamicdistributiongroup"); 
      Collection<PSObject> resultL = powershell.Invoke(); 
      return resultL; 

     } 

     static public Collection<PSObject> gmembers(string listn) 
     { 

      string GetMembers = "$FTE = Get-DynamicDistributionGroup '" + listn + "'"; 
      powershell.AddScript(GetMembers); 
      powershell.Invoke(); 
      powershell.AddScript("Get-Recipient -RecipientPreviewFilter $FTE.RecipientFilter"); 
      Collection<PSObject> resultM = powershell.Invoke(); 
      return resultM; 

     } 
    } 

답변

1

저는 세션에 물건을 저장하고 액세스하기 위해 속성을 사용한 여러 다른 응용 프로그램을 만들었습니다. 이것과 비슷한 것이 당신을 위해 일할 수도 있습니다.

public static Runspace runspace 
{ 
    get 
    { 
    //if not exist, create, open and store 
    if (Session["runspace"] == null){ 
     Runspace rs = RunspaceFactory.CreateRunspace(); 
     rs.Open(); 
     Session["runspace"] = rs; 
    } 

    //return from session 
    return (Runspace)Session["runspace"]; 
    } 
} 

그러면 이벤트 핸들러에서 정적 속성으로 액세스하면됩니다.

+0

나는 클래스와 비슷한 것을하려고 시도하고 있었지만 아직 확실하지는 않다. 건배 – DevilWAH

+0

내가 이것을 시도하면 "이름 세션"이 현재 상황에 존재하지 않는다 "내가 뭘 잘못하고 있는지에 대한 어떤 조언이 있나? – DevilWAH

+0

정렬 됨, 그냥 LOL을 만드는 모든 일은 위대한 일을 잘한다. – DevilWAH