【问题标题】:In Powershell, is there a way to ensure the #Requires -Modules always loads the latest changes?在 Powershell 中,有没有办法确保 #Requires -Modules 始终加载最新的更改?
【发布时间】:2019-01-14 23:19:05
【问题描述】:

我有一个 Powershell(5.1 版)模块,我刚刚添加了一个新函数,但它不会出现在调用 Powershell 脚本中。

我创建了一个模块,假设是 myModule.psm1,并显示 myModule.psd1。 清单具有以下设置:

FunctionsToExport = '*'
CmdletsToExport = '*'
VariablesToExport = '*'
AliasesToExport = '*'

myModule.psm1 位于我的 PSModulePath 中路径的 myModule 目录中。 我还明确地将 myModule 的完全限定路径添加到 PSModulePath。

在我的调用 Powershell 脚本中,我在文件顶部有 #Requires -Modules myModule

如果我向 myModule 添加函数,调用脚本似乎不会加载更改的模块。

似乎加载更改的唯一方法是使用Import-Module myModule -Force。我的理解是#Requires 应该解决这个问题。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    #Requires -Modules 仅提供名称时,仅检查模块是否已加载。如果尚未加载,它将加载它,但正在加载的旧版本仍然可以满足它。

    或者,您可以提供一个哈希表,该哈希表提供名称以及最小或精确版本。

    通过这样做,您可以加载模块的更新版本,只要您确实使用您的更改更新了版本(您应该这样做)。

    #Requires -Modules @{ ModuleName = 'myModule' ; RequiredVersion = '1.2.3' }
    

    当然,当您测试某些东西时,这不是很有用,因为您必须不断更改版本,不少于 2 个地方。

    当我开发模块时,我通常有一个强制加载模块的调试脚本,并且在我进行更改的任何时候我都会运行它。如果您的测试脚本真的只是为了测试,我建议您使用Import-Module -Force 而不是#Requires

    【讨论】:

      猜你喜欢
      • 2020-07-09
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多