我正在尝试从托管在 Windows 2008R2 上的 IIS 7.5 上的 ASP.NET 站点运行 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();
}
将appriciate任何帮助!
先谢谢了。