Chocolatey 心得
Chocolatey官网
Chocolatey是一款Windows平台的包管理工具,类似于centos的yum或ubuntu的apt。通过Chocolatey,可以实现软件,尤其是各式开源软件的一键安装与一键升级。
Chocolatey的文档写的非常好,这点即使在众多新兴软件中也不多见,强烈建议直接看官方文档:https://chocolatey.org/docs
安装Chocolatey
官网教程为https://chocolatey.org/install,在有管理员权限的powershell下执行以下安装脚本即可:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
查找包
可用 search/find/list 指令查找包,支持模糊查询。如果想看有哪些包,可以直接去官网看:https://chocolatey.org/packages
注意,现在的官网文档不再列出find指令,之后可能会被废弃。具体指令为:
choco search <filter> [<options/switches>]choco list <filter> [<options/switches>]clist <filter> [<options/switches>]
- 列出本地的包
clist -l
,-l
为--lo
,--localonly
,--lolcal-only
的简写 - 列出本地的包与电脑安装过的软件
choco list -li
或choco list -l -i
-i
需要配合-l
使用,用于列出不归Chocolatey管理的程序
clist -lclist potplayer
outdated 列出可升级的包
在大于0.9.9.6的版本中,可通过指令choco outdated
列出待升级的包
upgrade 升级
update 指令已/即将被弃用,现在升级只用upgrade
choco upgrade all -y
choco upgrade
指令可简写为 cup
,如cup all -y
pin 固定
用于固定软件,使得在执行升级全部包时自动跳过;通过维护一张固定列表实现该效果
用法:
- 添加至固定列表:
choco pin add -n=git
,其中-n
是-name
的简写 - 从固定列表移除:
choco pin remove -n=git
- 列出固定列表:
choco pin list
install 安装
choco install
可简写为 cinst
,语法为:
choco install <pkg|packages.config> [<pkg2> <pkgN>] [<options/switches>]cinst <pkg|packages.config> [<pkg2> <pkgN>] [<options/switches>]
- 添加参数以跳过包校验:
--ignore-checksums
- 可一次性下载多个包,如:
choco install a b c ... -y
如用代理安装vscode并自动确认:
choco install vscode -y --proxy=127.0.0.1:10809
uninstall 卸载
choco uninstall
,可简写为 choco cuinst
功能扩展
Chocolatey 定时自动升级所有软件
choco install choco-upgrade-all-at
有一个非官方的包(choco-upgrade-all-at)提供了该功能,介绍地址:https://chocolatey.org/packages/choco-upgrade-all-at。
该包添加了两个计划任务,一个定时执行choco upgrade all -y来升级所有包,一个定时结束升级指令。如果不需要升级,请用pin指令固定版本。
- 若不设置任何参数,默认每天的2点开始升级,4点结束升级
- choco install choco-upgrade-all-at --params "'/TIME:23:00'" 设置每天晚上11点开始升级,凌晨4点结束升级
- choco install choco-upgrade-all-at --params "'/DAILY:yes /TIME:04:00 /ABORTTIME:08:00'" 设置凌晨4点到8点升级
- choco install choco-upgrade-all-at --params "'/WEEKLY:yes /DAY:SUN /TIME:01:00'" 设置每周周1的1点到4点升级

Chocolatey 开机自动升级所有包
上一节的简化版(同一个人在维护),同样是通过定时任务实现,效果是开机后自动升级所有包。https://chocolatey.org/packages/choco-upgrade-all-at-startup
指令:choco install choco-upgrade-all-at-startup
feature 配置
- 查看配置项:
choco feature list
,有非常详细的说明 - 启用/禁用配置项:
choco enable/disable -n={feature}
,其中-n
为-name
的简写
默认不启用的常用配置项:
- 启用全局的自动确认:allowGlobalConfirmation
- 启用病毒检查:virusCheck
- 检测到需要重启时,不执行安装、升级、卸载指令:exitOnRebootDetected
- 执行升级时,继续使用安装时所使用的参数(这样升级全部包时会比较方便,目前仅测试,在新版本正式上线后将默认启用):useRememberedArgumentsForUpgrades
- 去掉输出内容的颜色:logWithoutColor
付费功能
Pro Edition (Individual) 要700+,可用1-8台电脑
状态同步
所有付费版本都支持功能。当从外部移除或升级Chocolatey管理的软件时,Chocolatey会更新其状态(移除包记录或提示升级)。
sync 自动同步
仅支持商业版!Chocolatey商业版可以检测电脑安装的软件,将不归Chocolatey管理的软件纳入管理。官方文档地址:https://chocolatey.org/docs/features-synchronize#sync-command。
指令很简单:choco sync
尚未实现的功能
不创建桌面图标
很遗憾,目前Chocolatey不支持该功能,可见 github issue https://github.com/chocolatey/choco/issues/4