无法将非整体式脚本模块发布到具有7个或更多功能的本地PowerShell画廊

时间:2019-05-23 22:46:15

标签: powershell

问题:
使用PowerShell 5.1时,我无法成功地将非整体脚本模块发布到本地PowerShell库,并且我的模块包含7个或更多功能。使用6个或更少的功能即可正常发布。

示例:FunctionsToExport ='Get-Test1','Get-Test2','Get-Test3','Get-Test4','Get-Test5','Get-Test6','Get-Test7'

发布始终挂在“ VERBOSE:对目标执行“发布模块”操作...”,但从未完成。

我没有看到任何错误,所以不确定它为什么挂起。

有效的方法:
当它包含6个或更少的函数时,我可以成功地将我的非整体脚本模块发布到本地PowerShell Gallery。

示例:FunctionsToExport ='Get-Test1','Get-Test2','Get-Test3','Get-Test4','Get-Test5','Get-Test6'

这很好:VERBOSE:模块发布成功...

如果我只是简单地添加一个功能并更新清单,那么如果不再在同一位置再次挂起,我将无法发布。

我很确定我错过了一个步骤,但是我很难弄清楚自己错过了什么。

我正在通过阅读Mike F Robbins和观看他的blog posts来学习presentations的非整体脚本模块设计。该设计的要点是每个功能都位于一个单独的PS1文件中,该文件源于PSM1文件。

我如何构建脚本模块的摘要:

  • 使用自定义石膏模板创建新的脚本模块支架。
  • 将功能添加到名为Public的文件夹中。
  • 更新清单中的模块版本和FunctionsToExport部分。
  • 使用PsDeploy或Publish-Module部署到本地PowerShell库。
  • 本地PowerShell库只是我的数据驱动器G:\ JnPowerShellGallery上的文件夹。

这就是我将模块发布到本地PSGallery的方式。

Publish-Module -Path 'G:\_temp\JnTestModule' -Repository JnPowerShellGallery -NuGetApiKey 'AnyStringWillDo' -Verbose -InformationAction Continue

这是我测试模块的OneDrive链接。
https://1drv.ms/f/s!AlsrG1Yfr5pHgts0RCM--SmRnUf3AA

$ PSVersionTable的输出

PSVersion                      5.1.17134.590                                                                                                                              
PSEdition                      Desktop                                                                                                                                    
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                                                                    
BuildVersion                   10.0.17134.590                                                                                                                             
CLRVersion                     4.0.30319.42000                                                                                                                            
WSManStackVersion              3.0                                                                                                                                        
PSRemotingProtocolVersion      2.3                                                                                                                                        
SerializationVersion           1.1.0.1   

我已经很接近为我的PowerShell模块构建我的第一个发布管道了,但是我仍然停留在这一点上。

有人知道什么可能导致此问题吗?

1 个答案:

答案 0 :(得分:2)

好吧,我刚刚发现我可以使用PowerShell Core 6.2.0成功发布我的模块!

http://slack.poshcode.org/ powershell-help频道上的Joel建议使用BOM将.psd1文件编码更改为UTF8。他说PowerShell 5不喜欢没有BOM的.psd1文件。默认情况下,它们在vscode中使用UTF8编码。我确实尝试过更改编码,但这不能解决我的问题。

由于他的建议,我想到了尝试使用PowerShell Core 6.2.0发布我的模块,并且有效!

这不能完全解决PowerShell 5.1的问题,但是我不介意切换到PowerShell Core 6.2.0来发布我的模块。这解决了我的问题。