微软的新一代Windows套件包管理器(OneGet)
转载请注明出处,不胜感激!关于PowerShell的文章,我也同步发布在我的微信公共订阅号里,欢迎关注:[一起PowerShell]
自从上一篇文章向大家阐明了为什么要学习PowerShell后。这次,我想从PowerShell最基本的入口概念说起,那就是用PowerShell来操作以及管理Windows上的套件包,说起套件包的管理自然要说到OneGet,那就从他开始吧。
什么是OneGet呢?
大家如果用过其它的一些非Windows的操作系统,如Ubuntu, CentOs,RedHat, MacOS等等就应该知道apt-get, rpm, homebrew等套件包管理工具。但是在Windows上我们却没有专门统一的包管理机制,当你要安装某某工具,下载某某软件套件都要自己去网站上搜索或者对应的第三方软件供应商网站下载,甚至有的人下载到了盗版带有病毒的软件,又或者对于某些无法自提供更新的工具要不定期的去手动去网站上检查更新并重新下载,十分麻烦和混乱。那么OneGet的出现让Windows系统从此解决了这个问题。OneGet是Windows系统上的套件包管理器,现在官方已经将它更名为PackageManagement了。他是一个基于以PowerShell为操作界面的统一管理套件工具,用户很轻松的使用PowerShell命令来安装和管理想要的软件套件,并且还可以自定义配置你指定的套件来源。
下面让我们来看看PackageManagement的架构图
从架构图可以看出,用户只要输入对应的管理命令后,该命令就会执行对应的操作,而背后的运行机制正如图上画的那样从左往右依次进行。
简单的说,PackageManagement的架构图是由四大单元组成。当用户输入对应的PowerShell cmdlets后,我们的第二个单元PackageManagement Core(套件包内核)中执行对应的操作,该内核单元以软件的安装/删除,发现等等分成了若干功能区域,紧接着会从第三个单元PackageManagement Providers(套件包提供者)里提取套件包提供者所能提供的对应的套件,而PackageManagement Providers提供的套件源头是哪来的呢?那就是从第四个单元的PackageSource(套件包来源)所获取的。
使用PackageManagement(OneGet)
使用OneGet前提是系统必须满足如下最低要求:
Windows 10, Windows Server 2016, or down-level Windows OS + WMF5
Linux or Mac with the [PowerShellCore][pscore]
如果你当前使用的系统是Windows 10的话,系统已经自带了PackageManagement包,如果没有的话可以微软官方下载 Windows Management Framework 5.0。
我们先使用Get-Module -Name PackageManagement查看下当前我的PackageManagement信息,如下我的PackageManagement版本号为截止目前最新的1.1.3.0。
PS C:\Users\Administrator> Get-Module -Name PackageManagement
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Script 1.1.3.0 PackageManagement {Find-Package, Find-PackageProvider...
我们使用Get-Command命令行来看看PackageManagement支持了多少PowerShell cmdlets命令,由于我的机器上安装的是WMF 5.1,所以我的是最新的PackageManagement包,可能内置的命令数量也不一样。
PS C:\Users\Administrator> Get-Command -Module PackageManagement
CommandType Name Version Source
----------- ---- ------- ------
Cmdlet Find-Package 1.1.3.0 PackageManagement
Cmdlet Find-PackageProvider 1.1.3.0 PackageManagement
Cmdlet Get-Package 1.1.3.0 PackageManagement
Cmdlet Get-PackageProvider 1.1.3.0 PackageManagement
Cmdlet Get-PackageSource 1.1.3.0 PackageManagement
Cmdlet Import-PackageProvider 1.1.3.0 PackageManagement
Cmdlet Install-Package 1.1.3.0 PackageManagement
Cmdlet Install-PackageProvider 1.1.3.0 PackageManagement
Cmdlet Register-PackageSource 1.1.3.0 PackageManagement
Cmdlet Save-Package 1.1.3.0 PackageManagement
Cmdlet Set-PackageSource 1.1.3.0 PackageManagement
Cmdlet Uninstall-Package 1.1.3.0 PackageManagement
Cmdlet Unregister-PackageSource 1.1.3.0 PackageManagement
可以看到我们从PackageManagement包中得到了13个有关于查找,获取,安装,注册,删除等等相关操作的PowerShell cmdlets命令。接下来我们用这里面的一些命令来给大家说明下如何使用OneGet。
既然要安装软件,我们肯定先要查找下有没有我们想要安装的软件,我正想给我的Windows安装一个7Zip软件包,这里我用Find-Package命令模糊查找我所需要的软件包。
PS C:\Users\Administrator> Find-Package -Name *7zip*
Name Version Source Summary
---- ------- ------ -------
7Zip4Powershell 1.8.0 PSGallery Powershell module for creating and extracting 7-Zip...
x7Zip 1.0.8 PSGallery Powershell DSC Configuration Script for installing ...
PS7Zip 1.3.0.1604 PSGallery Powershell module that allows you to work with comp...
7zip 16.4.0.20170420 chocolatey 7-Zip is a file archiver with a high compression ra...
7zip.install 16.4.0.20170420 chocolatey 7-Zip is a file archiver with a high compression ra...
7zip.portable 16.04 chocolatey 7-Zip is a file archiver with a high compression ra...
7zip.commandline 16.02.0.20170209 chocolatey 7-Zip is a file archiver with a high compression ra...
Easy7zip 0.1.2.2 chocolatey Easier to use and more featured version of 7-zip.
我发现了我想要的软件包已经出现了,说明软件包已经被收入到了官方Package库里。于是就使用Install-Package来安装。
PS C:\Users\Administrator> Install-Package -Name "7zip"
The package(s) come(s) from a package source that is not marked as trusted.
Are you sure you want to install software from 'chocolatey'?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): Y
Name Version Source Summary
---- ------- ------ -------
7zip 16.4.0.20170420 chocolatey 7-Zip is a file archiver with a high compression ra...
我们使用Get-Package来验证下当前系统里是否包含我们所需的软件,是否安装成功了吧。
PS C:\Users\Administrator> Get-Package -Name "7zip"
Name Version Source ProviderName
---- ------- ------ ------------
7zip 16.4.0.20170420 C:\Chocolatey\lib\7zip.16.4.0... Chocolatey
非常方便我们安装完了我们所需的软件,那么这些软件怎么来的呢,回忆下之前的架构图我们作为EndUser用户键入命令后,接着PackageManagement Core执行对应的功能操作,然后会从我们的PackageProvider得到提供的软件包。说到这里,那么我们还可以使用Get-PackageProvider命令获得我们的PackageManagement Providers都有哪些,而正是你看到的这些Providers,他们提供了我们所需要的软件。
PS C:\Users\Administrator> Get-PackageProvider
Name Version DynamicOptions
---- ------- --------------
Chocolatey 2.8.5.101 SkipDependencies, ContinueOnFailure, ExcludeVersion, ForceX86, PackageSave...
msi 3.0.0.0 AdditionalArguments
msu 3.0.0.0
NuGet 2.8.5.207 Destination, ExcludeVersion, Scope, SkipDependencies, Headers, FilterOnTag...
PowerShellGet 1.0.0.1 PackageManagementProvider, Type, Scope, AllowClobber, SkipPublisherCheck, ...
Programs 3.0.0.0 IncludeWindowsInstaller, IncludeSystemComponent
但是如果我们需要一些本机目前并没有安装的PackageProvider怎么办呢,我们可以用Find-PackageProvider查找官方目前提供哪些PackageProvider。
PS C:\Users\Administrator> Find-PackageProvider
Name Version Source Summary
---- ------- ------ -------
nuget 2.8.5.208 https://onege... NuGet provider for the OneGet meta-package manager
psl 1.0.0.210 https://onege... psl provider for the OneGet meta-package manager
chocolatey 2.8.5.130 https://onege... ChocolateyPrototype provider for the OneGet meta-pa...
NanoServerPackage 1.0.1.0 PSGallery A PackageManagement provider to Discover, Save and...
GitHubProvider 0.5 PSGallery GitHub-as-a-Package - PackageManagement PowerShell ...
DockerMsftProvider 1.0.0.1 PSGallery PowerShell module with commands for discovering, in...
ContainerImage 0.6.4.0 PSGallery This is a PackageManagement provider module which h...
PowerShellGet 1.1.2.0 PSGallery PowerShell module with commands for discovering, in...
TSDProvider 0.2 PSGallery PowerShell PackageManager provider to search & inst...
ChocolateyGet 1.0.0.1 PSGallery An PowerShell OneGet provider that discovers packag...
GistProvider 0.6 PSGallery Gist-as-a-Package - PackageManagement PowerShell P...
MyAlbum 0.1.2 PSGallery MyAlbum provider discovers the photos in your remot...
OfficeProvider 1.0.0.1 PSGallery OfficeProvider allows users to install Microsoft Of...
GitLabProvider 1.3.4 PSGallery GitLab PackageManagement provider
WSAProvider 1.0.0.4 PSGallery Provider to Discover, Install and inventory windows...
0install 2.12.1 PSGallery Zero Install is a decentralized cross-platform soft...
AppxGet 0.1.0.1 PSGallery Powershell Package Management (OneGet) Provider for...
还记得我们之前提到的PackageManagement架构图么,PackageProvider是从PackageSource里获得数据源的,也就是PackageSource才是我们最根本的数据源头,我们使用Get-PackageSource查看下我们当前机器都有那些PackageSource。
PS C:\Users\Administrator> Get-PackageSource
Name ProviderName IsTrusted Location
---- ------------ --------- --------
chocolatey Chocolatey False http://chocolatey.org/api/v2/
PSGallery PowerShellGet False https://www.powershellgallery.com/api/v2/
你还可以使用Register-PackageSource来自己注册一个数据源头,另外相同的命令配合不同的参数也会获得不同的结果,如使用Find-PackageProvider -AllVersions来活的所有当前已支持的PackageProvider并罗列出所有支持的历史版本号信息。除此之外还有许多命令就不一一说明使用了,使用方法很简单,大家可以去一个个试试。