2013-11-26 124 views
6

我试图在C#中运行EMC命令。我使用安装了交换管理工具的个人电脑运行。从C#运行Exchange Powershell命令#

我们的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的命令时,它会抛出一个错误,说MyServer\MyStorageGroup不存在。但是,当我shift-rightCLick并以不同的用户身份运行并使用我的Exchange管理员帐户的凭据时,我可以运行这些命令。

回答

6

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

由于this post暗示,请检查您是否安装了2007版本的工具,因为Snapin在2010版本中不可用。

尝试以下步骤:

打开你选择的PowerShell的编辑和添加PSSnapin那里。如果有效,Snapin可用,如果不可用,它确实没有安装在您的机器上。

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

最终,您可以手动安装有问题的.dll文件。从基思山参考this answer你必须发出以下PowerShell命令

$snapinPath = 'Microsoft.Exchange.Management.PowerShell.Admin.dll' 
C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe /i $snapinPath 
+0

原因我说这听起来像权限是因为我能够打开PowerShell并添加管理单元。但是,当我运行诸如'get-mailboxstatistics myUserId'的命令时,它会抛出一个错误,指出“MyServer \ MyStorageGroup”不存在。但是,当我shift-rightCLick并以不同的用户身份运行并使用我的Exchange管理员帐户的凭据时,我可以运行这些命令。 – Johnrad

4

象这样的错误往往是一个32位/ 64位的问题。例如,snapin可能被注册为32位,您的C#程序是64位,反之亦然。

有时您可以通过运行其他版本的InstallUtil来修复此问题,例如,

$snapinPath = 'Microsoft.Exchange.Management.PowerShell.Admin.dll' 
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\InstallUtil.exe /i $snapinPath 

修复后,我认为你会遇到另一个问题,你如何创建命令。创建命令时不指定参数。相反,你写这样的东西:

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