c# - 具有运行空间模拟的 MVC Controller

标签 c# asp.net-mvc-3 powershell runspace

尝试使用模拟从 MVC 3 Controller 执行 Powershell cmdlet,但不断收到“不允许请求的注册表访问权限”。调用 Runspace.Open() 时出现异常

StringBuilder stringBuilder = new StringBuilder();   

RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();

using (new Impersonator("username", "domain", "password"))
{
    Runspace runspace = RunspaceFactory.CreateRunspace(rsConfig);

    runspace.Open();

    Pipeline pipeLine = runspace.CreatePipeline();

    string script = "get-process";
    pipeLine.Commands.AddScript(script);

    Collection<PSObject> commandResults = pipeLine.Invoke();                

    foreach (PSObject obj in commandResults)
    {
        stringBuilder.AppendLine(obj.Properties["ProcessName"].Value.ToString());
    }

调试显示注册表错误是由于在 HKCU\Environment 上尝试读取注册表项造成的。在没有模拟的情况下运行上述操作成功。

注意:在此处找到模拟类:http://platinumdogs.wordpress.com/2008/10/30/net-c-impersonation-with-network-credentials/

关于为什么会发生这种情况或可以采取什么措施来解决它的任何想法?

更新:

睡了一觉后,我推断将 Runspace.Open() 移动到模拟行上方将允许运行空间访问所需的注册表数据(环境变量),这确实有帮助。

现在代码可以与内置的 cmdlet 一起正常工作,但是当我加载“Microsoft.Exchange.Management.PowerShell.Admin”并尝试任何 Exchange Cmdlet 时,应用程序崩溃了。

最佳答案

成功!

如果这对其他人有用,这就是我如何让它工作的:

  1. 安装 Exchange 管理工具
  2. 应用最新的服务包
  3. 确保为域 Controller 添加参数(Microsoft - KB943937)

关于c# - 具有运行空间模拟的 MVC Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9095803/

相关文章:

c# - Intellitest 是否可用于 .NET 标准库?

asp.net-mvc-3 - 如何在 Asp.Net Mvc 3 中显示自定义错误页面?

css - @Html.RenderAction 和 CSS

c# - Visual Studio 2013和2015之间重载方法行为的更改

c# - 屏幕抓取应用程序窗口并与鼠标和键盘交互

c# - 如何将自定义构建参数添加到 Visual Studio 2013 C# 项目?

asp.net-mvc-3 - 那些类型的服务是否应该注入(inject)基类中? (与静态类相比)

object - 在 PowerShell 中访问对象属性的值

powershell - 使用PowerShell在IIS6中停止 'Default Web Site'

PowerShell 转换从函数返回的值。如何避免这种情况?