【问题标题】:Calling remote Cmdlets from C# Runspace从 C# 运行空间调用远程 Cmdlet
【发布时间】:2013-10-16 18:56:23
【问题描述】:

我正在尝试在未安装 Exchange cmdlet 的远程计算机上运行远程 Powershell Cmdlet(Exchange 2010 的 cmdlet 之一),在我的 C# 代码中使用 Powershell 远程处理 (v2)。我有这样的事情:

var connection = new WSManConnectionInfo("http://my.exchange.srv/PowerShell", "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credentials);
var runspace = RunspaceFactory.CreateRunspace(connection);
var ps = PowerShell.Create();
ps.Runspace = runspace;
runspace.Open();
var results = ps.AddCommand("Enable-MailPublicFolder").AddArgument(folderId).Invoke();

这将返回 RemoteException:术语“Enable-MailPublicFolder 无法识别”错误。这是因为本地计算机不熟悉 Exchange Cmdlet。

但是,我不知道如何将 Exchange 模块导入我的运行空间。我找到了各种解决方案,但都是部分的。有些人告诉我使用RunspaceConfiguration 添加Exchange 2010 管理单元,但RunspaceFactory.CreateRunspace 没有重载接受RunspaceConfiguration 并且还允许我传递WSManConnectionInfo 以连接到远程主机。 另一种解决方案是调用AddScript 而不是AddCommand,这似乎不会引发异常,但在没有告诉我原因的情况下似乎也没有做任何事情。我宁愿工作相对强类型(使用 AddCommand)而不是传入随机字符串。

还有其他不涉及在本地机器上安装模块的方法吗?或者,除此之外,如何在本地安装 Exchange 2010 cmdlet?

【问题讨论】:

标签: c# powershell exchange-server-2010


【解决方案1】:

您收到的错误通常表明您用于远程连接的帐户不是 Exchange 中必要的 RBAC 角色组的成员。

当远程会话初始化时,服务器将检查建立连接的帐户具有哪些角色,并在为该组角色成员定制的会话中创建一组代理功能。如果该帐户不属于管理公用文件夹的角色组,您将无法在会话中使用公用文件夹管理 cmdlet 的代理功能。

【讨论】:

  • 确实,就是这样!遗憾的是没有给出或记录与安全相关的错误,因为我所要做的就是将用户添加到公用文件夹管理组以修复它。谢谢!
猜你喜欢
  • 2021-03-03
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2019-05-22
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
相关资源
最近更新 更多