Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 第二次尝试时,从IIS调用powershell失败_C#_Asp.net_Iis_Powershell_W3wp - Fatal编程技术网

C# 第二次尝试时,从IIS调用powershell失败

C# 第二次尝试时,从IIS调用powershell失败,c#,asp.net,iis,powershell,w3wp,C#,Asp.net,Iis,Powershell,W3wp,我正在尝试从ASP.NET站点运行powershell脚本,该站点位于Windows 2008R2上的IIS 7.5上 该站点有两个字段,分别是用户名和密码以及一个按钮 按下按钮时,执行以下代码,并将输出写入站点 第一个登录该网站的用户一切正常。 第一个用户可以无限次运行cmdlet。 但是,当我使用其他用户(kerberos身份验证)登录站点时,第二个用户(以及所有其他用户)无法运行脚本。 RunspaceFactory.CreateRunspace()因异常而失败。 例外情况是什么?好问题,

我正在尝试从ASP.NET站点运行powershell脚本,该站点位于Windows 2008R2上的IIS 7.5上

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

第一个登录该网站的用户一切正常。
第一个用户可以无限次运行cmdlet。
但是,当我使用其他用户(kerberos身份验证)登录站点时,第二个用户(以及所有其他用户)无法运行脚本。
RunspaceFactory.CreateRunspace()因异常而失败。
例外情况是什么?好问题,消息和innerException为空。
事件日志也为空。
执行iisreset命令后,第一个用户再次能够运行脚本和所有其他命令

此外,我还构建了一个WinForms应用程序,它可以做完全相同的事情,包括用户名和密码字段,一切都很好
所以我假设,问题在于IIS与powershell的连接

每次按下按钮时都会执行以下代码:
(可能包含用记事本编写的小语法错误(无法复制过去))

我将感谢任何帮助

感谢高级版。

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

这是微软在与微软的顾问进行了数小时的windbg后的回答


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

为什么它会说身份验证-。。。而不是=?输入错误。。写在记事本上。很抱歉
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();
}