Ошибка при использовании олицетворения с Powershell и Exchange 2007 из C # - PullRequest
0 голосов
/ 23 сентября 2011

Я использую системную службу Windows для создания почтового ящика в Ecxhange 2007 с помощью Powershell. Поскольку он работает как системная служба, я обертываю вызов powershell, используя олицетворение (используя advapi32.dll), чтобы запустить его как пользователь с соответствующими разрешениями на обмен, однако я получаю следующее сообщение об ошибке.

Невозможно загрузить оснастку Windows PowerShell Microsoft.Exchange.Management.PowerShell.Admin из-за следующей ошибки: инициализатор типа для «Microsoft.Exchange.Data.Directory.Globals» вызвал исключение.

Существует статья Microsoft KB ( KB943937 ), описывающая эту проблему, и исправление заключается в установке Exchange SP1 RU1, но в настоящее время я использую SP3 RU1. Я использую параметр -DomainController, как указано в статье базы знаний, но все еще получаю ту же ошибку.

Если я запускаю службу от имени пользователя, то, что я олицетворяю код, работает нормально, поэтому я не думаю, что это проблема с кодом. Я попытался запустить это на Windows XP и Server 2008 с той же проблемой.

Вызов System.Security.Principal.WindowsIdentity.GetCurrent().Name перед кодом powershell Я вижу, что олицетворение работает правильно.

Кто-нибудь сталкивался с этим раньше?

1 Ответ

1 голос
/ 23 сентября 2011

Для любого, кто сталкивался с этим в будущем, проблема была в том, с чего начиналось подражание.

Вы должны начать олицетворение после добавления оснастки, но до создания пространства выполнения.

RunspaceConfiguration rsconfig = RunspaceConfiguration.Create();
PSSnapInException snapInException = null;
PSSnapInInfo info = rsconfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out snapInException);
BeginImpersonation();
myRunspace = RunspaceFactory.CreateRunspace(rsconfig);

См. эту статью для полного исходного кода.

...