我试图理解PowerShell中的包管理,我得到的图片不完整。当我查看对象PSRepository,PackageProvider和PackageSource时,它们似乎都有以下关系:
PSGallery
。NuGet
,Chocolatey
或PowerShellGet
。nuget.org
,MyCustomVSTSFeed
或PSGallery
。我查看了以下链接,但它仍未提供关于它们如何相关的清晰图片。
PSGallery
既是 PackageSource 又是 PSRepository ?PowerShellGet
既是提供图库访问权限的模块名称,又是 PackageProvider 的名称?答案 0 :(得分:2)
最好的理解方式是将其视为两个球体; PackageManagement 和 PowerShellGet 一个。
PackageManagement(以前称为 OneGet)是外层,是 Windows 中的包裹递送框架。它通过 PowerShell 进行管理,但适用于整个操作系统或用户配置文件。它提供了两个主要的类:
PowerShellGet 是内层,是一个 PowerShell 模块,它使用 PackageManagement 框架来交付专用于 PowerShell 的包< /强>。它注册为 PackageProvider,并使用关联的 PackageSources 从 PowerShell 库提供模块和脚本,或其他来源。它引入了一个名为 PSRepository 的新类。您可以将其视为仅存在于 PowerShellGet 领域中的 PackageSource 的虚拟包装器。
当您使用 Register-PSRepository
注册新的 PSRepository 时,您会注意到,如果您运行 Get-PackageSource
,则会自动添加一个具有相同名称和 URI 的新源,对于 PowerShellGet 提供程序。 PSRepository 有一些特定的功能:
Update-*
Cmdlet 手动更新上述内容。对于(卸载)安装/更新模块和脚本,PowerShellGet 使用 PackageManagement Cmdlet。对于发布脚本和模块,它使用 .NET CLI 命令 dotnet nuget push
将它们包装在 nupkg
存档中。
综上所述,我们现在可以回答问题中的四点:
string
属性,可与 Get-PackageProvider
一起使用以访问 PackageProvider 对象。简而言之,当您在 PowerShell 之外处理软件包时,您可以直接使用 PackageManagement 框架。当您处理用于 PowerShell 的模块和脚本时,您可以使用PowerShellGet,它为您提供对框架和 NuGet 的抽象访问。
来源: