AddPSSnapin()与RunspaceFactory.CreateRunspace(WSManConnectionInfo)之间的区别?

时间:2012-02-11 02:37:26

标签: powershell powershell-v2.0 exchange-server powershell-remoting exchange-server-2010

我需要使用C#和Powershell连接到Exchange 2010服务器。 Exchange 2007文档要我to add a snap in

  RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
  PSSnapInException snapInException = null;
  PSSnapInInfo info = rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out snapInException);
  Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig);
  myRunSpace.Open(rsConfig);

网上的其他样本要我像这样使用WSMan

        WSManConnectionInfo connectionInfo = new WSManConnectionInfo(false, "ExchangeServer.ibm.com", 80, "/Powershell", "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credential);

所以我的问题是:

  • 这些技术之间的有效区别是什么?

  • 它们可以互换吗?

2 个答案:

答案 0 :(得分:1)

在Exchange 2007中,您在本地运行空间中使用管理管理单元来运行cmdlet。所有更改都是在您的凭据下进行的。

在Exchange 2010中发生了变化。维护是通过Exchange服务器提供的远程会话完成的。实际更改由Exchange服务器代表您使用代理帐户完成,Exchange确定您是否有权根据您所属的RBAC角色进行更改。更改将记录在管理审核日志中。

Exchange 2010有一个管理单元,但MS不支持将其添加到本地会话中,并且并非所有cmdlet都在该环境中正常工作。大多数cmdlet都可以工作,但它会绕过RBAC,并且在该环境中所做的任何更改都不会记录到管理审核日志中。

答案 1 :(得分:0)

您的第一个示例只是在本地系统上实例化一个新的Runspace,它不使用WS-MAN。第二部分是利用WS-MAN服务,这需要您在提前连接的所有系统上配置它。

说实话,如果您不需要使用WS-MAN连接到远程系统,我会避免使用它并使用Exchange团队推荐的做法。 WS-MAN(读取:可以)设置和使用相当简单,但它增加了一层复杂性,可能根本就没有必要,并导致额外的故障排除问题。