首页 > 解决方案 > Powershell 可以使用动态模块路径“使用”语句吗?

问题描述

我有一些 powershell 模块,其中包含我需要从各种 powershell 脚本实例化的类。要从 powershell 脚本访问类,我有如下语句:

  using module "..\..\Library\Mymodule.psm1"

但我不提前知道我的库在文件夹层次结构中与脚本的相对位置。

我们不想使用标准的 powershell 模块文件夹,因为这些类处于源代码控制之下,部署到用户的文件夹将是一场噩梦。

这对谷歌来说是一个非常困难的话题,因为到处都在使用“使用”!

尝试为同一个文件提供多个可能的位置,但当然我们会收到不存在的备用位置的错误:

未加载指定的模块“C:...Mymodule.psm1”,因为在任何模块目录中都找不到有效的模块文件。在行:0 字符:0

using module "..\..\Library\Mymodule.psm1"
using module "..\Library\Mymodule.psm1"
using module ".\Library\Mymodule.psm1"

但我宁愿运行一个函数来首先确定正确的模块路径,然后使用类似这样的东西

using module "$foundModulePath"

有没有办法动态设置模块的路径然后“使用”它?

标签: powershelldynamicdirectoryusing

解决方案


我会在一个单独的存储库中对我的模块进行版本控制,并编写一个函数,在运行时在工作空间内克隆该存储库。

在该 repo 中使用标签 - 可以让我控制我为每个脚本加载的模块的版本。这将使模块的开发成为可能,即使脚本仍然必须使用旧版本并且我不想“投入”时间重新编写它,只是因为我已经更改了依赖项。

想法2。Gradle 非常擅长处理大型项目中凌乱的依赖列表。
您可以构建一个准备工作区的 gradle 脚本,然后从其中执行您的 powershell 脚本。 在此处查看链接


推荐阅读