Я разработал веб-приложение MVC ASP.NET для выполнения сценариев PowerShell.
Я использую веб-сервер VS и могу выполнить прекрасные сценарии.
Однако требование - то, что пользователи могут выполнить сценарии против AD для выполнения действий, которые их собственным учетным записям пользователей не позволяют сделать.
Поэтому я использую олицетворение для переключения идентификационных данных прежде, чем создать PowerShell runspace:
Runspace runspace = RunspaceFactory.CreateRunspace(config);
var currentuser = WindowsIdentity.GetCurrent().Name;
if (runspace.RunspaceStateInfo.State == RunspaceState.BeforeOpen) {
runspace.Open();
}
Я протестировал использование учетной записи администратора домена, и я получаю следующее исключение при вызове runspace. Открытый ():
Описание Исключения безопасности: приложение попыталось выполнить операцию, не позволенную политикой безопасности. Для удовлетворения этого ходатайства необходимое разрешение, свяжитесь системным администратором или измените доверительный уровень приложения в конфигурационном файле. Детали исключения: Система. Безопасность. SecurityException: Требуемый доступ к реестру не позволяется.
Веб-приложение работает в полном доверии, и я явно добавил учетную запись, которую я использую для олицетворения для группы локальных администраторов машины (даже при том, что группа администраторов домена уже была там).
Я использую вызов advapi32.dll LogonUser для выполнения олицетворения похожим способом к этому сообщению (http://blogs.msdn.com/webdav_101/archive/2008/09/25/howto-calling-exchange-powershell-from-an-impersonated-thead.aspx)
Любая справка ценила, поскольку это - что-то вроде выставочного стопора в данный момент.
Спасибо Ben
Помогает ли это сообщение в блоге? Поставляется прямо от разработчиков PowerShell. По сути, PowerShell запускает новый поток для запуска конвейера, и поскольку .NET2.0 не позволяет потоку использовать олицетворение из вызывающего потока, он терпит неудачу.
http://blogs.msdn.com/powershell/archive/2007/09/10/impersonation-and-hosting-powershell.aspx