我正在使用PowerShellGet从我当地的Nuget Feed安装我自己的PowerShell模块(打包并发布为here)。
我这样安装一次:
Install-Module MyModule -Scope CurrentUser
然后我就像这样更新它:
Update-Module MyModule
它按预期工作,但在每次版本更新后,我都会复制模块而不是覆盖:
Get-Module MyModule -ListAvailable
# Output
Directory: C:\Users\user\Documents\WindowsPowerShell\Modules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 1.0.0.40 MyModule {...}
Manifest 1.0.0.39 MyModule {...}
Manifest 1.0.0.38 MyModule {...}
最新版本中删除的功能仍然可用,PowerShell ISE自动完成显示每个功能的重复项:
@CmdrTchort提出了额外的调查检查,以下是结果。
Get-Module -Name MyModule -ListAvailable | %{ $_.ModuleBase }
正如预期的那样,PowerShellGet将它们安装到%USERPROFILE%\Documents\WindowsPowerShell\Modules
:
C:\Users\user\Documents\WindowsPowerShell\Modules\MyModule\1.0.1.1
C:\Users\user\Documents\WindowsPowerShell\Modules\MyModule\1.0.0.40
C:\Users\user\Documents\WindowsPowerShell\Modules\MyModule\1.0.0.39
C:\Users\user\Documents\WindowsPowerShell\Modules\MyModule\1.0.0.38
我看到$PSScriptRoot
包含该路径。
Update-Module -Name MyModule -WhatIf
# Result
# What if: Performing the operation "Update-Module" on target "Version '1.0.1.1' of module 'MyModule', updating to version '1.0.1.2'".
powershell
控制台Get-Module
以确保完全不导入MyModule Get-Module
仅导入了一个最新版本的MyModule 对我而言:
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 1.0.1.2 MyModule {...
似乎这里没有问题,因为@CmdrTchort写道,预计Get-Module -ListAvailable
显示所有已安装的版本。
我认为PowerShell自动完成PowerShell和powershell_ise的行为有点令人困惑,因为它显示了相同功能的重复,如果几个版本可用且功能从最新版本中删除,可能会很快更改或以某种方式配置。
答案 0 :(得分:1)
当您打包新版本时,如何捆绑模块?
Powershell支持加载同一模块的多个版本(ListAvailable为您提供各种版本)。
您可以执行Get-module MyModule -ListAvailable并打印完整模块路径以检查它们的安装方式吗?
您是否更新了每个版本的Module-manifest并将其捆绑在新文件夹中?
您可以将同一模块的两个版本加载到Powershell会话中;如果是这样,最后导入的cmdlet是有效的cmdlet。
Import-Module还支持-MimimumVersion og RequiredVersion。
当您在常规导入模块中遇到问题时,我怀疑它的结构和PSModulePath是如何混乱的。
也许$ PSModulePath与"版本"每次新升级的路径,而不是像往常一样更新它?在这种情况下; "第一"版本可能是加载的版本,将presedence规则放在另一个上面。我也会快速查看$ PSModulePath中的内容。
当您使用-WhatIf开关执行Update-Module检查以查看其更新内容时。
安装模块/使用模块的一些链接:
https://msdn.microsoft.com/en-us/library/dd878350(VS.85).aspx
https://technet.microsoft.com/en-us/library/dn807166.aspx
希望这会有所帮助:)