【发布时间】:2015-07-31 15:47:40
【问题描述】:
问题:当我使用一个脚本远程运行另一个依赖于一个模块的脚本时,该模块没有被导入。
我有 3 个相互交互的脚本。一个Controller 脚本、Body 脚本和Functions 模块。
Controller 正在处理远程计算机的身份验证并使用Invoke-Command 在远程计算机上执行body 脚本。
body 依赖于 functions 模块。
如果我直接在远程计算机上运行“body”脚本,模块会正确导入并且脚本完成;但是,如果我使用 `controller` 脚本远程运行 `body` 脚本,则永远不会导入该模块。如果我将模块中的函数嵌套在正文脚本中(看起来很乱)并远程运行,脚本就会完成,所以我知道导入模块有问题。我也尝试将模块导入到 `controller` 脚本中。它可以正确导入,但是当 `body` 脚本执行时,它仍然找不到模块中的函数。 (我猜它会导入本地 Powershell ... shell) 我尝试使用 `-verbose` 标记运行导入模块以查看它是否正在导入,并且它在所有实例中都有效,除非使用 `controller` 远程运行 `body`。
编辑:我几乎可以肯定这是因为它试图在远程计算机上查找模块路径,并且该路径引用了主机上的一个位置。除了使用从远程计算机返回主机的invoke-command 来导入模块之外,我不确定如何完成此操作。
【问题讨论】:
-
您是否尝试过进入 ISE 并对其进行调试,如果您进入并检查每个服务器是否存在功能。
-
@Luke 我有。我发现问题是 import-module 命令正在服务器上运行,并且提供的路径引用了主机上的路径。因此脚本无法在服务器上提供的路径中找到模块,因为它不存在。在这一点上,我正在尝试找出包含模块的最佳方式。
-
没有看到你的脚本我认为你应该能够在远程机器上启动
PSsession并从那里运行它。 -
@Luke 你是说我应该在远程机器上启动一个 PSSession 以连接回主机?这与使用调用命令从服务器连接回主机本质上是一样的吗?
-
不,相反,使用会话将主机连接到远程,它是相似的,但它会保持会话打开,允许您通过一个会话运行多个脚本。
标签: powershell remote-server powershell-5.0