【发布时间】:2016-06-28 11:55:57
【问题描述】:
这是我想要实现的目标,但我找不到任何相关信息。
我想为远程服务器上可用的模块创建一个远程模块代理。
我知道如何使用远程处理,但我想要创建更清晰的脚本文件的东西。
举个例子。如果我想在远程计算机上从模块 MyModule 执行 MyCmdlet 我会这样做
$block={
# Invoke the cmdlet from a module named MyCmdlet
MyCmdlet -Parameter1 -Parameter2
}
Invoke-Command -ComputerName "" -ScriptBlock $block
但我想进入这样的地方
Import-Module MyModuleRemote
MyCmdlet -ComputerName "" -Parameter1 -Parameter2
请注意我的客户端计算机上没有安装 MyModule。
我可以为每个 cmdlet 使用 Invoke-Command 包装器重新编写模块,但这不是目的。我想做的是通过为每个 cmdlet 和参数创建一个代理相等代理来远程化 MyModule。甚至 Get-Help 至少应该对参数组合起作用。
我有几个想法,但我不确定是否可行。
- 创建一个 powershell 模块,例如PSRemotify 将探测远程服务器上的模块并生成代码。
- 如果我选择将文件写入文件系统,那么这应该是可能的,如果我可以对 cmdlet 进行反射。
- 如果我不想保存文件,那么我需要在内存中执行所有操作。我可以在内存中写入 cmdlet 的主体吗?我可以生成字符串并导入其嵌入的 cmdlet 吗?
- 创建一个执行 1.2 的脚本。
我的偏好是选项 1.2。非常干净,不会在文件系统上留下任何痕迹。
有什么想法吗?有人尝试过类似的东西吗?
我的调查和@Persistent13 的回答后的结论:
PowerShell 开箱即用地提供了此功能。它被称为隐式远程处理。在@Persistent13 的回答之前,我选择了错误的部分,因为我认为分享我的经验很有趣,我已经在博客中讨论过它。 import and use module from a remote server
【问题讨论】:
-
$Session=New-PSSession -ComputerName ""; Import-Module -PSSession $Session MyModule?
标签: powershell dynamic powershell-remoting cmdlet powershell-module