从 C# 运行空间调用远程 Cmdlet

本文关键字:Cmdlet 调用 空间 运行 | 更新日期: 2023-09-27 18:35:30

我正在尝试从未安装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();

这将返回远程异常:术语"无法识别启用邮件公共文件夹"错误。这是因为本地计算机不熟悉 Exchange Cmdlet。

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

有没有另一种不涉及在本地计算机上安装模块的方法?或者,除此之外,如何在本地安装 Exchange 2010 cmdlet?

从 C# 运行空间调用远程 Cmdlet

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

初始化远程会话时,服务器将检查建立连接的帐户具有哪些角色,并在会话中创建一组为该角色记忆自定义的代理函数。 如果该帐户不属于管理公用文件夹的角色组,则会话中可用的公用文件夹管理 cmdlet 将没有代理功能。