如何创建可由客户端调用的“远程Powershell”服务器对象?

时间:2014-01-31 17:33:13

标签: c# powershell exchange-server powershell-remoting

在Microsoft Exchange中,客户端通常使用以下命令调用远程服务器对象

$s = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://server01/PowerShell/ -Authentication Kerberos
Import-PSSession $s

我的理解是客户端不需要软件,并且在服务器“Server01”上远程执行调用

我的问题是:

  1. 假设我创建了一个基本的PowerShell对象,我如何以一种可以由客户端以类似方式调用它的方式公开它?

  2. 使用任意PowerShell命令行开关是否可以“远程处理”,或者是否有一组必须满足的先决条件?

3 个答案:

答案 0 :(得分:1)

是的,它适用于任意模块。该功能称为隐式远程处理。您可以使用要加载的任何模块创建远程会话,然后使用Import-PSSession,尽管您可能希望使用-Prefix来区分同一命令的本地版本和远程版本。然后可以从本地计算机运行这些命令,但它们将以远程计算机为目标。如果您在上面#1中创建的对象位于远程端,请注意隐式远程处理不会导入远程变量(或提供程序)。

答案 1 :(得分:1)

要添加Keith提供的内容,您获得的实际上不是cmdlet,而是代理功能。您获得的功能取决于您在Exchange中所属的RBAC角色。如果您不是已授权执行某项功能的角色组的成员,则您根本无法获得这些cmdlet的代理功能。如果您尝试使用它们,它只会告诉您找不到命令。此外,您不必使用import-pssession。如果您只使用有限数量的cmdlet,则一旦建立了会话,就可以使用针对该会话的Invoke-Command来运行Exchange cmdlet并节省执行导入的开销,这将为所有可用的加载代理功能cmdlet进入本地会话。

答案 2 :(得分:1)

至于先决条件,它依赖于WS-Management,因此您必须在主机和远程计算机上运行WinRM服务。这并不罕见,但是有些公司因为某种原因(通常是安全性)在其环境中禁用它,所以如果事情无法正常工作,您可能需要仔细检查它。

默认情况下,用户必须是远程计算机的管理员。这可以更改,并且可以由远程计算机上的管理员指定用于访问的自定义设置,但如果您想要去那里,则需要阅读。 http://go.microsoft.com/fwlink/?LinkID=145152(就个人而言,我开始阅读并放弃它,因为它只是在我的笔记本电脑和台式机之间,我是两者的管理员,但由于你有用户连接到服务器,你可能想投资一段时间搞清楚。)

请记住,对于远程会话,默认情况下不会执行从远程计算机上的配置文件加载的任何内容,因此如果要访问配置文件加载的命令,请确保调用 - 命令要加载的配置文件在Import-PSSession之前的远程会话上。 (我学到了很难的方法。)

对于远程PSSession而言,这一切都是正确的,而不仅仅是Import-PSSession。

此外,由于它导入命令的方式(它在导入之前将它们转换为函数),您必须将执行策略设置为限制较少的范围而不是Restricted或AllSigned。