Попытка выполнить командлет Powershell с контроллера MVC 3, используя олицетворение, но продолжает получать «Запрошенный доступ к реестру не разрешен». исключение при вызове 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/
Любые идеи о том, почему это происходит или что можно сделать, чтобы решить эту проблему?
UPDATE:
После некоторого сна я решил, что перемещение Runspace.Open () над линией олицетворения позволит пространству выполнения получить доступ к необходимым данным реестра (переменным среды), и это действительно помогло.
Теперь код отлично работает со встроенными командлетами, но когда я загружаю «Microsoft.Exchange.Management.PowerShell.Admin» и пробую любой из командлетов Exchange, приложение вылетает.