我开发了一个 ASP.NET MVC Web 应用程序来执行 PowerShell 脚本。
我正在使用 VS Web 服务器并且可以很好地执行脚本。
但是,要求用户能够针对 AD 执行脚本以执行他们自己的用户帐户不允许执行的操作。
因此,我在创建 PowerShell 运行空间之前使用模拟来切换身份:
Runspace runspace = RunspaceFactory.CreateRunspace(config);
var currentuser = WindowsIdentity.GetCurrent().Name;
if (runspace.RunspaceStateInfo.State == RunspaceState.BeforeOpen) {
runspace.Open();
}
我已经使用域管理员帐户进行了测试,并且在调用 runspace.Open() 时出现以下异常:
安全异常
说明:应用程序试图执行安全策略不允许的操作。要授予此应用程序所需的权限,请联系您的系统管理员或在配置文件中更改应用程序的信任级别。
异常详细信息:System.Security.SecurityException:不允许请求的注册表访问。
Web 应用程序在完全信任的情况下运行,我已将我用于模拟的帐户明确添加到机器的本地管理员组(即使域管理员组已经存在)。
我正在使用 advapi32.dll LogonUser 调用以类似于这篇文章的方式执行模拟 (http://blogs.msdn.com/webdav_101/archive/2008/09/25/howto-calling-exchange-powershell-from-an-impersonated-thead.aspx)
任何帮助表示赞赏,因为这目前有点阻碍。
谢谢
本
最佳答案
这篇博文有帮助吗?直接来自 PowerShell 开发人员。本质上,PowerShell 启动一个新线程来运行管道,并且由于 .NET2.0 不允许该线程使用来自调用线程的模拟,因此它失败了。
http://blogs.msdn.com/powershell/archive/2007/09/10/impersonation-and-hosting-powershell.aspx
关于ASP.NET PowerShell 模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2656553/