从C#运行Exchange Powershell命令



我正在尝试在C#中运行EMC命令。我在我的个人电脑上运行这个,电脑上安装了交换管理工具。

我们的exchange服务器上运行着2007。

问题是,当我运行Powershell或EMC时,我需要以具有exchange server 2007权限的其他用户身份运行,因为我的个人配置文件没有这些权限。

话虽如此,这是我在个人电脑上运行的代码:

RunspaceConfiguration config = RunspaceConfiguration.Create();
PSSnapInException snapEx = null;
PSSnapInInfo info = config.AddPSSnapIn("Microsoft.Exchange.Management.Powershell.Admin", out snapEx);
Runspace runspace = RunspaceFactory.CreateRunspace(config);
runspace.Open();
Command createCMD = new Command("Get-Mailbox ID");
Pipeline pipe = runspace.CreatePipeline();
pipe.Commands.Add(createCMD);
Collection<PSObject> results = pipe.Invoke();

我得到的错误是:

此计算机上未安装Windows PowerShell管理单元Microsoft.Exchange.Management.Powershell.Admin

当我尝试添加Microsoft.Exchange.Management.Powershell.Admin管理单元时,我得到了它。

我觉得这与我个人资料的权限有关,但我不完全确定。如果这是真的,我该如何解决这个问题。


编辑

我之所以说这听起来像权限,是因为我可以打开powershell并添加管理单元。然而,当我运行诸如get-mailboxstatistics myUserId之类的命令时,它会抛出一个错误,说MyServerMyStorageGroup不存在。然而,当我向右移动CLick并以不同的用户身份运行并使用我的exchange管理员帐户的凭据时,我就可以运行这些命令。

如果一个错误表明它没有安装在您的计算机上,为什么您怀疑它与权限有关?

正如这篇文章所建议的,请检查您是否安装了2007版本的工具,因为有问题的Snapin在2010版本上不可用。

尝试以下步骤:

打开您选择的powershell编辑器,并在其中添加PSSnapin。如果它工作,Snapin是可用的,如果没有,它真的没有安装在你的机器上。

如果可用,请尝试将构建配置从x86设置为64位,反之亦然。

最终,您可以手动安装有问题的.dll。根据Keith hill的回答,您必须发出以下Powershell命令

$snapinPath = 'Microsoft.Exchange.Management.PowerShell.Admin.dll'
C:WindowsMicrosoft.NETFrameworkv2.0.50727InstallUtil.exe /i $snapinPath

像这样的错误通常是32位/64位的问题。例如,管理单元可能注册为32位,而您的C#程序是64位,反之亦然。

有时你可以通过运行其他版本的InstallUtil来解决这个问题,例如

$snapinPath = 'Microsoft.Exchange.Management.PowerShell.Admin.dll'
C:WindowsMicrosoft.NETFramework64v2.0.50727InstallUtil.exe /i $snapinPath

修复后,我认为您将遇到另一个创建命令的问题。创建命令时不指定参数。相反,你会写一些类似的东西:

Command createCMD = new Command("Get-Mailbox");
createCMD.Parameters.Add(null, "ID");

相关内容

  • 没有找到相关文章

最新更新