C# 第二次尝试时,从IIS调用powershell失败
我正在尝试从ASP.NET站点运行powershell脚本,该站点位于Windows 2008R2上的IIS 7.5上 该站点有两个字段,分别是用户名和密码以及一个按钮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()因异常而失败。 例外情况是什么?好问题,
按下按钮时,执行以下代码,并将输出写入站点 第一个登录该网站的用户一切正常。
第一个用户可以无限次运行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();
}