繁体   English   中英

从C#运行Exchange Powershell命令

[英]Run Exchange Powershell command from C#

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

我们的交换服务器已在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 snapIn时,我得到它。

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


编辑

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

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

正如本文所述 ,请检查您是否安装了2007版本的工具,因为2010版本中没有相关的Snapin。

请尝试以下步骤:

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

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

最终,您可以手动安装.dll。 参考Keith hill的这个答案 ,您必须发出以下Powershell命令

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

像这样的错误通常是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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM