尝试使用模拟从 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 时,应用程序崩溃了。
最佳答案
成功!
如果这对其他人有用,这就是我如何让它工作的:
- 安装 Exchange 管理工具
- 应用最新的服务包
- 确保为域 Controller 添加参数(Microsoft - KB943937)
关于c# - 具有运行空间模拟的 MVC Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9095803/