在c#中使用Powershell和exchange2007进行模拟时出现错误

本文关键字:模拟 错误 exchange2007 Powershell | 更新日期: 2023-09-27 18:09:39

我正在使用Windows系统服务在exchange2007中使用Powershell创建邮箱。当它作为系统服务运行时,我使用模拟(使用advapi32.dll)包装powershell调用,以具有适当交换权限的用户身份运行它,但是,我收到以下错误消息。

无法在Microsoft.Exchange.Management.PowerShell.Admin中加载Windows PowerShell管理单元,因为以下错误:全局变量抛出异常。

有一篇Microsoft KB文章(KB943937)描述了这个问题,修复方法是安装exchange SP1 RU1,但我目前运行的是SP3 RU1。我正在使用-DomainController参数,如KB文章中指定的,但我仍然收到相同的错误。

如果我以我所模拟的用户的身份运行服务,代码运行良好,所以我不认为这是代码的问题。我试着在Windows XP和Server 2008上运行这个程序,遇到了同样的问题。

在powershell代码之前调用System.Security.Principal.WindowsIdentity.GetCurrent().Name,我可以看到模拟工作正常。

以前有人遇到过这个吗?

在c#中使用Powershell和exchange2007进行模拟时出现错误

对于将来遇到这种情况的任何人来说,问题在于模拟是从哪里开始的。

您必须在添加管理单元之后但在创建运行空间之前启动模拟。

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

完整的源代码请参阅本文