PowerShell模块部署复制

PowerShell模块部署复制,powershell,powershell-module,Powershell,Powershell Module,我正在使用Azure DevOps将PowerShell模块部署到服务器。此发布任务将模块部署到目录C:\Windows\System32\WindowsPowerShell\v1.0\modules\。一旦这些模块成功部署到此文件夹中,我就能够使用它们 如果我修改其中一个模块并重新发布它,C:\Windows\System32\WindowsPowerShell\v1.0\modules\中的文件将得到更新,但是当使用pwsh从批处理文件运行时,仍然使用该模块的旧版本 我发现模块文件也存在于以

我正在使用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使用不同的路径加载模块。使用
$env:PSModulePath-split”;“
了解正在使用的路径。 每个路径之间的差异是用户范围和使用范围(例如,针对自定义模块或windows官方模块)

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

有关更多详细信息,请查看这篇精彩文章:

现在谈谈你的问题

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

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

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

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