【问题标题】:PowerShell Module Deployment DuplicationPowerShell 模块部署复制
【发布时间】:2019-11-04 02:24:17
【问题描述】:

我正在使用 Azure DevOps 将 PowerShell 模块部署到服务器。此发布任务将模块部署到目录C:\Windows\System32\WindowsPowerShell\v1.0\Modules\。成功部署到此文件夹后,我就可以使用这些模块了。

如果我修改其中一个模块并重新发布它,C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ 中的文件会更新,但是当使用pwsh 从批处理文件运行时,仍会使用旧版本的模块。

发现模块文件也存在以下路径:

  • C:\Program Files\PowerShell\Modules\
  • C:\Program Files\PowerShell\6\Modules\

使用 Azure DevOps 部署新版本时,上述两个目录中的旧版本更新。在这些位置手动更新模块可以解决问题。

为什么将模块文件复制到这两个附加路径中? 部署新版本的模块时是否应该覆盖这些副本? 在这种情况下部署模块的正确方法是什么?

【问题讨论】:

    标签: powershell powershell-module


    【解决方案1】:

    Powershell 使用不同的路径来加载模块。使用$env:PSModulePath -split ";" 了解正在使用的路径。 每个路径的区别在于用户范围和使用范围(例如为自定义模块或windows官方模块制作)。

    现在,默认情况下,PS 在所有路径中查找每个模块的最新版本。所以也许旧版本正在运行,因为在您重新部署时。您没有更新模块清单中的模块版本,因此如果 PS 看到它们是“相同”版本,它会在 PSModulePath 上加载最后一个。

    查看这篇很棒的帖子了解更多详情:Everything you wanted to know about PowerShell's Module Path

    现在回答你的问题。

    • 为什么模块文件被复制到这两个附加路径中?

      这可能是服务器配置或您用于部署的脚本。

    • 部署新版本的模块时是否应该覆盖这些副本?

      不一定,如果版本维护正确。在分享的帖子中说如何检查每个模块的版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多