我试图从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();
}
会任何并欣赏帮助!
谢谢先进。
为什么说认证 - ...而不是=? – Eris
错字..写在记事本上。抱歉。 –