2013-07-21 58 views
0

我试图从ASP.NET网站托管Windows 2008R2上的IIS 7.5上运行powershell脚本。从IIS调用powershell失败,第二次尝试

该网站有两个字段,用户名和密码以及一个按钮。
按下按钮时,执行以下代码,并将输出写入站点。

所有登录到网站的用户都可以正常工作。
第一个用户可以无限次运行该cmdlet。
但是,当我用不同的用户(Kerberos认证)登录到网站时,第二个用户(以及所有其他用户)无法运行脚本。
RunspaceFactory.CreateRunspace()失败,出现异常。
什么是例外?好问题,Message和innerException是空白的。
事件日志也为空。
再次执行iisreset命令后,第一个用户可以运行该脚本,并且所有其他脚本都可以运行。

此外,我构建了一个WinForms应用程序,它完全相同,用户名和密码字段以及一切正常工作!
所以我假设,问题是与IIS连接到PowerShell。

下面的代码执行上的每个按钮按下:
(可含少量语法错误,写在记事本(不能复制过去))

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(); 
} 

会任何并欣赏帮助!
谢谢先进。

+0

为什么说认证 - ...而不是=? – Eris

+0

错字..写在记事本上。抱歉。 –

回答

0

好,所以问题实际上是PowerShell库中的一个错误(或功能)。 即使强制GC,对象也不会死亡。

这就是Microsoft在微软的顾问经过数小时windbg后的回答。

您可以通过为每个运行空间打开一个新进程来传递此问题,并且可以使用win32api传递用户。

相关问题