2013-07-21 1 views
0

Windows 2008R2에서 IIS 7.5에서 호스트되는 ASP.NET 사이트에서 powershell 스크립트를 실행하려고합니다.IIS에서 powershell을 두 번째 시도 할 때 실패했습니다.

이 사이트에는 사용자 이름과 암호 및 단추 두 개의 필드가 있습니다.
버튼을 누르면 다음 코드가 실행되고 출력이 사이트에 기록됩니다.

사이트에 로그인 한 첫 번째 사용자는 모든 것이 잘 작동합니다.
첫 번째 사용자는 cmdlet을 무한 횟수 실행할 수 있습니다.
하지만 다른 사용자 (kerberos 인증)로 사이트에 로그인하면 두 번째 사용자 (및 모든 추가 사용자)가 스크립트를 실행할 수 없습니다.
RunspaceFactory.CreateRunspace()가 예외와 함께 실패하고 있습니다.
예외는 무엇입니까? 좋은 질문, Message 및 innerException 비어 있습니다.
이벤트 로그도 비어 있습니다.
iisreset 명령 후에 다시 첫 번째 사용자가 스크립트를 실행할 수 있고 다른 모든 사용자는 스크립트를 실행할 수 있습니다.

또한 사용자 이름과 암호 필드를 사용하여 똑같은 작업을 수행하는 WinForms 응용 프로그램을 만들었습니다.
그래서 나는 powershell에 대한 IIS 연결에 문제가 있다고 가정하고 있습니다.

string serverNameFQDN = "myserver.mydomain.com"; 

char[] cArray = passwordClearText.ToCharArray(); 
SecureString secString = new SecureString(); 

foreach(char c in cArray) 
{ 
     secString.AppendChar(c); 
} 

PSCredential psCred = new PSCredential(Username, secString); 

WSManConnectionInfo connectionInfo = 
    new WSManConnectionInfo(new Uri(String.Format("http://{0}:5985/wsman", serverNameFQDN)), 
        "http://schemas.microsoft.com/powershell/Microsoft.Powershell", psCred) 
    { 
     AuthenticationMechanism = AuthenticationMechanism.Kerberos, 
     OpenTimeout = 10000, 
     OperationTimeout = 30*60*1000; 
    }; 

using (Runspace remoteRunspace = RunspaceFactory.CreateRunspace(connectionInfo)) 
{ 
    var pipe = remoteRunspace.CreatePipeline(); 
    remoteRunspace.Open(); 

    pipe.Commands.AddScript("some-cmdlet"); 
    var res = pipe.Invoke(); 

    // Get the output, irrelevent. 

    pipe.Stop(); 
    pipe.Dispose(); 
    remoteRunSpace.Close(); 
} 

어떤 도움을 appriciate겠습니까 (메모장 (캔트 과거의 복사)에 기록 사소한 구문 오류를 포함 할 수 있습니다)
:

다음 코드는 각 버튼을 누를에서 실행!
고맙습니다.

+0

왜 인증 대신에 - = 대신? – Eris

+0

Typo .. 메모장에 글입니다. 죄송합니다. –

답변

0

확인 문제는 실제로 powershell 라이브러리의 버그 (또는 기능)입니다. GC를 강제하더라도 개체가 죽지 않습니다.

마이크로 소프트의 컨설턴트와 몇 시간 만에 Microsoft의 답변을 얻었습니다.

각 런 공간에 대한 새 프로세스를 열어이 문제를 해결하고 win32api를 사용하여 사용자를 전달할 수 있습니다.