2011-09-23 60 views
0

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

由于以下错误,无法加载Windows PowerShell管理单元Microsoft.Exchange.Management.PowerShell.Admin:“Microsoft.Exchange.Data.Directory.Globals”的类型初始值设定项引发异常。

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

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

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

有没有人遇到过这个?

+0

试试看这个答案http://stackoverflow.com/questions/11806/how-do-you-impersonate-an-active-directory-user-in-powershell –

+0

@Smallpygmy好你想到了 - 我想它如果您将编辑作为答案进行发布并标记为“好”,那就很好。 :-) – Matt

回答

1

对于任何未来遇到此问题的人来说,问题出在模拟开始的地方。

您必须在添加管理单元之后但在创建管理空间之前开始模拟。

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

请参阅this文章的完整源代码。

+0

你从哪里获得导入的dll,以便你可以使用'BeginImpersonation()'方法? – BRogers

相关问题