ASP.NET PowerShell 模拟

标签 asp.net powershell impersonation

我开发了一个 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/

相关文章:

PowerShell 代码格式

asp.net - 如何保存在转发器中加载的项目?

asp.net - SignalR 未加载。请确保在 ~/signalr/js 之前引用 jquery.sigalR-x.js

c# - 通过 UseUrls 指定监听 HTTP 端口的方式是否正确?

c# - 模拟在 Powershell 中使用 WindowsIdentity 抛出 FileNotFoundException

httpclient - kerberos 委托(delegate)场景下的 ASP 双跳请求

c++ - 从在 "user"帐户下运行的服务调用 OpenWindowStation

asp.net - Razor 字符串操作

svn - 获取 SVN 存储库版本号

powershell - 如何使用PowerShell远程检查Web应用程序池的状态?