尝试使用模拟从 MVC 3 控制器执行 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 时,应用程序就会崩溃。