【问题标题】:Error when using Impersonation with Powershell and Exchange 2007 from C#从 C# 中使用带有 Powershell 和 Exchange 2007 的模拟时出错
【发布时间】:2011-11-23 13:21:40
【问题描述】:

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

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

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

如果我以冒充用户的身份运行服务,则代码运行良好,因此我认为代码没有问题。我试过在 Windows XP 和 Server 2008 上运行它,但遇到了同样的问题。

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

以前有人遇到过这种情况吗?

【问题讨论】:

标签: c# powershell impersonation exchange-server-2007


【解决方案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文章。

【讨论】:

  • 从哪里获取用于导入的 dll,以便您可以使用BeginImpersonation() 方法?
猜你喜欢
  • 1970-01-01
  • 2016-09-06
  • 2013-12-09
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 2019-02-25
相关资源
最近更新 更多