powershell - 无法将非整体脚本模块发布到具有 7 个或更多函数的本地 PowerShell 库

标签 powershell

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

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

发布总是卡在“详细:正在目标上执行操作“发布模块”……”,但从未完成。

我没有看到任何错误,所以我不确定它挂起的原因。

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

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

这工作正常:详细:成功发布模块......

如果我只是再添加一个功能并更新 list ,我将无法再发布,除非它再次卡在同一个地方。

我很确定我错过了一步,但我很难弄清楚我错过了什么。

我正在从 Mike F Robbins 学习非整体脚本模块设计通过阅读他的 blog posts看着他的presentations .这个设计的要点是每个函数都在一个单独的 PS1 文件中,该文件是从 PSM1 文件中提取的。

我如何构建脚本模块的总结:

  • 使用自定义 Plaster 模板创建新的脚本模块脚手架。
  • 将函数添加到名为 Public 的文件夹。
  • 更新 list 中的模块版本和 FunctionsToExport 部分。
  • 使用 PsDeploy 或 Publish-Module 部署到本地 PowerShell 库。
  • 本地 PowerShell Gallery 只是我的数据驱动器 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 模块构建我的第一个发布管道,但我被困在了这一点上。

有谁知道可能导致此问题的原因是什么?

最佳答案

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

乔尔在 http://slack.poshcode.org/ powershell-help channel 建议将 .psd1 文件编码更改为带 BOM 的 UTF8。他说 PowerShell 5 不喜欢没有 BOM 的 .psd1 文件。它们在 vscode 中默认使用 UTF8 编码。我确实尝试更改编码,但这并没有解决我的问题。

感谢他的建议,我考虑尝试使用 PowerShell Core 6.2.0 发布我的模块并且成功了!

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

关于powershell - 无法将非整体脚本模块发布到具有 7 个或更多函数的本地 PowerShell 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56283804/

相关文章:

sql-server - 将用户批量导入到 SQL Azure

powershell - 如何将 ASCII Art 输出到控制台?

Powershell 7 - 并行 While 循环

Powershell FileSystemWatcher 脚本在一些新文件上触发两次

电源外壳。写入事件日志

powershell - 使用 Powershell 操作 CSV

xml - 获取名称中包含 '#' 的 XML 元素

azure - 如何使用注册应用程序的服务主体通过 PowerShell 模块连接到 Azure?

Powershell:Foreach 不工作?

windows - 创建证书的 New-SelfSignedCertificate 给出拒绝访问