PowerShell 模块部署复制

PowerShell Module Deployment Duplication

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

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

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

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

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

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

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

看看这个很棒的 post 了解更多详情:Everything you wanted to know about PowerShell's Module Path

现在回答你的问题。

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

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

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

    不一定,如果版本维护正确的话。 post分享上说了如何查看各个模块的版本。