微软的新一代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并罗列出所有支持的历史版本号信息。除此之外还有许多命令就不一一说明使用了,使用方法很简单,大家可以去一个个试试。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值