ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows软件包管理器Chocolatey安装教程:从cmd到离线部署全解析

Windows软件包管理器Chocolatey安装教程:从cmd到离线部署全解析 1. 安装前的准备先搞清楚你要装的是什么Chocolatey 是 Windows 平台上的软件包管理器你可以把它理解成 Windows 世界的“应用商店命令行版”。用过 Linux 上 apt 或者 yum 的同学应该秒懂——一个命令搞定软件安装、卸载、升级不用再打开浏览器搜索下载、下一步下一步、再勾选“同意协议”也不用担心装了一堆捆绑软件。我第一次接触 Chocolatey 是帮同事批量部署开发环境的时候。那会儿要在一台新电脑上装 Git、Node.js、Python、VS Code、7-Zip手动装一轮差不多要折腾一上午安装包还得到处找。后来用 Chocolatey 写了个脚本一条命令全装完整个过程不到十分钟。从那天起我就再也没手动下载过安装包。回到安装这个话题本身。Chocolatey 的安装流程本身并不复杂真正容易出问题的地方在于前置条件、执行权限和执行方式。很多人安装失败其实不是 Chocolatey 的问题而是 PowerShell 执行策略、TLS 版本或者 PATH 环境变量这些底层环境没准备好。1.1 系统要求与前置条件检查清单Chocolatey 官方要求的系统环境如下看起来简单但每一条都值得核对Windows 7 / Windows Server 2008建议直接 Windows 10/11 或 Server 2016 以上版本PowerShell 2.0Windows 10/11 自带的是 5.1完全够用.NET Framework 4.5新版 Chocolatey 建议 4.8老版本系统需要手动确认稳定的网络连接安装脚本需要从官方源下载很多人忽略的一点是 TLS 版本。Chocolatey 官方源要求 TLS 1.2 以上Windows 7 和 Windows Server 2008 默认只启用 TLS 1.0这就导致安装脚本执行时直接报“无法建立 SSL/TLS 安全通道”的错误。如果你还在用老系统装之前先在 PowerShell 里跑一下[Net.ServicePointManager]::SecurityProtocol [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12这个命令把 TLS 1.2 加进当前会话的协议列表不走系统全局注册表不影响其他程序。实测在 Windows Server 2012 上用这个方法能顺利解决大多数安装报错。1.2 为什么官方推荐用 cmd 安装而不是 PowerShellChocolatey 官方安装文档里给出的命令是写在 cmd 里的很多新手会疑惑既然这是一个 PowerShell 友好的工具为什么不直接用 PowerShell 装核心原因是执行策略Execution Policy。PowerShell 默认的 Restricted 策略会阻止任何 .ps1 脚本运行而 Chocolatey 的安装脚本恰恰是一个 .ps1。虽然你可以用Set-ExecutionPolicy改策略再执行但这个操作涉及管理员权限、群组策略覆盖等多个变量反而容易横生枝节。cmd 环境则完全不受执行策略影响一条命令直接拉脚本、跑流程干净利落。非要走 PowerShell 也不是不行下面这两种方式我会放在后面的实操章节里展开讲包括其中需要避开的坑。2. 三种主流安装方式各自适用场景与完整步骤安装 Chocolatey 的方式有几种我按“最常用 → 最省事 → 最特殊”的顺序来拆。实际使用中你不需要全部掌握选适合你场景的那一种就够了。2.1 方式一cmd 命令行安装最推荐打开一个管理员权限的命令提示符直接粘贴这一行%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command [System.Net.ServicePointManager]::SecurityProtocol 3072; iex ((New-Object System.Net.WebClient).DownloadString(https://community.chocolatey.org/install.ps1)) SET PATH%PATH%;%ALLUSERSPROFILE%\chocolatey\bin这一串命令乍看很吓人拆开看其实就四步调用系统自带的 PowerShell 引擎不走 PowerShell 控制台所以不受执行策略限制-ExecutionPolicy Bypass临时绕过执行策略只对本次进程有效SecurityProtocol 3072把 TLS 强制设成 1.23072 是 TLS 1.2 的枚举值用 WebClient 下载官方 install.ps1 脚本并直接执行装完后建议关掉当前 cmd 窗口重开一个然后验证choco -v能打印出版本号就说明装好了。新开的窗口会自动读取新的 PATH 环境变量不需要手动刷新。2.2 方式二PowerShell 安装管理员权限注意如果你坚持用 PowerShell需要先解除本进程的执行策略限制。注意这里一定用-Scope Process意思是只作用于当前窗口不会改动系统全局设置安全性最好Set-ExecutionPolicy Bypass -Scope Process -Force [System.Net.ServicePointManager]::SecurityProtocol [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 iex ((New-Object System.Net.WebClient).DownloadString(https://community.chocolatey.org/install.ps1))这种方式有个容易踩的坑如果你不是以管理员身份打开的 PowerShell第三步执行时大概率会报“访问被拒绝”或者写不进C:\ProgramData\chocolatey。判断方法很简单——窗口标题栏显示“管理员”字样就是提权成功没显示就右键选“以管理员身份运行”。2.3 方式三离线安装包部署内网/无外网环境这是个特殊情况但遇到的人不少——比如公司内网机器不能上外网或者服务器在隔离网络里。这种场景下你需要一台能上外网的电脑提前下载好安装文件再拷到目标机器上。外网机器上先执行# 下载安装脚本到本地 Invoke-WebRequest -Uri https://community.chocolatey.org/install.ps1 -OutFile install.ps1 # 下载 chocolatey 包本体zip 格式 Invoke-WebRequest -Uri https://community.chocolatey.org/api/v2/package/chocolatey -OutFile chocolatey.nupkg然后把这两个文件拷到目标机器上先重命名.nupkg为.zip解压把解压后的tools目录里的内容复制到C:\ProgramData\chocolatey最后把C:\ProgramData\chocolatey\bin加入系统 PATH 环境变量。另一种更简单的方式是把两个文件放在同一目录然后本地执行Set-ExecutionPolicy Bypass -Scope Process -Force .\install.ps1这个脚本会优先读取当前目录的chocolatey.nupkg不再联网下载。离线环境下强烈建议用这个方法比手动复制目录再配 PATH 可靠得多。3. 核心配置与目录结构装完别急着用先搞懂这几件事安装完成只是第一步理解 Chocolatey 的文件布局和运行逻辑才是后续能不能玩转的关键。我在指导新手时发现很多人用 Chocolatey 踩坑是因为完全不了解它在系统里是怎么“存活”的出了问题也不知道去哪看日志、改配置。3.1 默认安装目录与各文件作用解析Chocolatey 默认安装在C:\ProgramData\chocolatey和普通软件装在Program Files不一样。这不是随随便便定的路径而是经过考量的ProgramData文件夹默认对用户有读取权限但只有管理员能写入普通用户能通过 Chocolatey 安装软件但不能随意改动核心文件安全层级合理路径里没有空格这在命令行调用时不至于因为路径解析出错目录对所有用户可见多用户系统下不需要反复配置目录的核心结构如下C:\ProgramData\chocolatey\ ├── bin\ # shim 文件存放目录关键 ├── lib\ # 已安装软件的包管理记录 ├── lib-bad\ # 安装失败/损坏的包记录 ├── lib-bkp\ # 包备份 ├── logs\ # 安装和卸载日志排障必看 ├── config\ # 配置文件 └── .chocolatey\ # 内部状态文件bin目录里的东西值得多说两句。你通过choco install git装完 Git实际上执行文件变成了一群很小的.exe文件放在bin目录下它们本身就是真实程序的“快捷方式”。这就是 Chocolatey 的 shim 机制——所有通过 Chocolatey 安装的命令行工具都会被自动创建一个 shim 放到bin里然后把这个目录加入系统 PATH所以你才能在任意位置直接调用git、python、node这些命令。有一次我排查一个奇怪的问题某台机器明明装了 Node.js但命令行敲node -v总是提示找不到命令。一看 PATH原来是把C:\ProgramData\chocolatey\bin给弄丢了。这个目录一旦不在 PATH 里所有通过 Chocolatey 装的命令行工具都会“集体消失”。排查思路要在脑子里留个位置。3.2 自定义安装目录能改但强烈不推荐网上有人说 Chocolatey 支持通过设置环境变量ChocolateyInstall来改安装目录比如装到 D 盘。这个说法技术上没错你可以先创建环境变量再执行安装脚本Chocolatey 就会装到指定位置。但我的建议是不要这么干除非你有极强的理由。为什么Chocolatey 的官方文档明确表示不支持自定义安装目录。虽然它真的能装上但后续升级的时候Chocolatey 会假设自己装在C:\ProgramData\chocolatey尤其是 shim 机制在 PATH 里的指向如果不匹配升级后某些软件的命令就会全部失效。我见过不止一个同事为了省 C 盘空间改了安装目录结果每次choco upgrade all都要手动修复 shim最后没办法只能卸载重装回默认目录。C 盘空间紧张的话更合理的做法是配置 Chocolatey 的包缓存位置和软件安装位置而不是动 Chocolatey 自己。具体配置方式后面会讲到。3.3 验证安装结果三个命令确认一切正常装完 Chocolatey 后用一个命令验证还不够我一般会跑三个choco -v检查 Chocolatey 本身版本能输出版本号说明主程序正常。choco list --local-only列出本机已经通过 Chocolatey 安装的所有软件包。刚装完应该是空的或者只有chocolatey自己。choco --version这个命令会额外输出一些系统信息包括 PowerShell 版本、系统架构等帮助判断运行环境。4. 常见安装问题与排查技巧实录这个部分是把我在各种环境里安装 Chocolatey 时遇到的典型问题做一个梳理。很多坑不是官方文档会写的属于实操中才会撞上的经验。4.1 PowerShell 执行策略相关报错现象用 PowerShell 安装时报错内容包含无法加载文件 ... 因为在此系统上禁止运行脚本或者unauthorized access。原因执行策略限制或者没有以管理员身份运行。解决思路先看窗口标题确认是否管理员权限不是就重开是的话运行Get-ExecutionPolicy查看当前策略通常返回Restricted或AllSigned。用Set-ExecutionPolicy Bypass -Scope Process临时绕过即可我上面在创建的 PowerShell 安装方式里已经给出了完整命令段。注意Set-ExecutionPolicy会弹出确认提示可以用-Force参数跳过。但不要图省事把系统全局策略直接改成Unrestricted这会降低 PowerShell 的安全性让所有脚本都能本地执行对任何一台正规环境里的机器都不是好习惯。用-Scope Process就够了。4.2 TLS 安全通道报错现象安装脚本下载阶段报错The request was aborted: Could not create SSL/TLS secure channel。原因目标系统默认启用的 TLS 版本过低Windows 7/Server 2008 尤其常见或者防火墙/代理拦截了安装脚本的下载请求。解决思路安装前先执行 TLS 1.2 启用命令前面 1.1 节给出的那行然后重试。如果还不行检查系统是否安装了 2020 年之后的更新补丁微软曾为提高 TLS 1.2 兼容性发布过专项更新老系统补上更新会更稳。如果公司网络有代理还需要单独配置[System.Net.WebRequest]::DefaultWebProxy New-Object System.Net.WebProxy(http://代理地址:端口)这个设置只对当前会话有效。也可以安装完成后用choco config set proxy http://代理地址:端口持久化配置。4.3 PATH 环境变量未生效现象安装过程中没有报错但安装完成后执行choco -v提示找不到命令。原因安装脚本在 cmd 窗口里临时更新了 PATH但当前窗口的 PATH 是启动时就加载的不会自动刷新或者系统 PATH 更新失败。解决思路关掉当前终端窗口重开。如果重开还不行检查系统环境变量里有没有C:\ProgramData\chocolatey\bin这一项reg query HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment /v Path没有的话手动加上。注意系统环境变量和用户环境变量的区别Chocolatey 的 bin 目录必须加在系统环境变量里加在用户变量里会出现管理员权限下正常、普通用户下失效的诡异现象我排查过好几次才发现是这个问题。4.4 常见问题速查表问题现象最可能原因首选排查动作安装脚本下载失败网络不通/DNS 问题打开浏览器访问 https://community.chocolatey.org 看能否打开能打开但脚本失败则检查代理设置权限被拒绝未管理员运行关闭窗口右键“以管理员身份运行”后重试杀毒软件拦截安装脚本安全软件对脚本类行为敏感临时关闭实时防护安装成功后再开或给 install.ps1 添加信任choco 命令找不到PATH 未包含 bin 目录重开终端验证系统 PATH 是否含C:\ProgramData\chocolatey\bin安装某软件时提示“Not a valid command”软件包名称错误用choco search 关键词确认正确的包名升级包时报“文件正在被占用”目标程序正在运行关闭相关软件后重试或重启系统后执行升级4.5 安装后第一个小目标装个软件试试水Chocolatey 装完之后我建议新手先跑一个简单的安装命令练手找一个体量小、依赖少的软件。比如choco install 7zip -y这个命令会从官方源下载 7-Zip 并自动安装。-y参数的意思是跳过确认提示需要用户手动同意时才加。装完后验证7z --help能看到帮助信息就说明一条龙完成了。这一步成功的意义在于你已经跑通了“安装 → 调用 → 使用”的完整链路后面再装 Git、Node.js、Python 这些复杂工具时就不会发怵。5. 安装后的推荐设置与升级维护要点很多教程到这里就结束了但实际操作中还有几个小设置能提升使用体验。这部分的经验是让我从“能用 Chocolatey”到“用起来顺手”的关键。5.1 打开全局确认开关省掉每个包的 -y默认情况下choco install xxx会弹出一句“是否继续安装”需要手动输入y或aa表示全部允许。脚本批量安装的时候每条都要人工确认非常痛苦。执行一次choco feature enable -n allowGlobalConfirmation以后所有安装命令都默认自动确认。我个人的建议是这步一定做因为 Chocolatey 的核心场景就是脚本化批量部署每次都要手动确认等于自废武功。5.2 查看所有已安装软件choco list 不只是看列表choco list --local-only这个命令列出的不只是软件名每一行还带一个版本号可以清楚知道哪些包已经过时。配合choco upgrade all一键升级所有通过 Chocolatey 安装的软件。唯一需要注意的是升级某些系统级软件比如驱动、安全工具可能碰到需要注销或重启才能完成的情况最好选择在不用电脑的时候跑升级。5.3 用 choco info 看包详情避免装错包Chocolatey 社区源里存在同名但用途不同的包。比如git和git.install现在看功能上几乎一致但历史上有些拆分再比如nodejs和nodejs-lts是不同版本线的选择。装之前用choco info nodejs看一下包描述、版本和依赖关系比直接搜一个名字就装要靠谱得多。不夸张地说这个习惯帮我避免了至少五次装错包然后卸载重装的返工。5.4 设置缓存目录解决 C 盘容量焦虑Chocolatey 下载的安装包默认放在C:\ProgramData\chocolatey\lib下的包目录里时间长了会占不少空间。可以通过配置把缓存挪到其他盘符choco config set cacheLocation D:\chocoCache执行后 Chocolatey 会把下载的.nupkg文件缓存到 D 盘并会保留一些临时文件。这个配置对我来说最实用的一点是内网环境下可以把缓存目录指向一个共享文件夹多台机器安装相同软件时互相之间能利用缓存不用每台都从外网重新下载一遍。5.5 查看安装日志排障的终极武器遇到奇奇怪怪的安装失败与其瞎猜不如直接看日志。Chocolatey 的所有操作都会记录在C:\ProgramData\chocolatey\logs\chocolatey.log这个日志文件详细记录了安装过程中的每一步操作、下载的资源地址、执行的文件路径和具体报错原因。有一次我排查一个软件安装失败日志里明确写着“尝试获取版本信息失败”顺着这条线索很快定位到是软件源的元数据问题跟 Chocolatey 本身毫无关系。遇到问题先翻日志这比重新安装十次都有效。写在最后的个人体会Chocolatey 从安装到上手门槛其实很低真正让我觉得有价值的是它带来的思维方式转变——从“找安装包 → 双击 → 下一步”的 GUI 操作变成“写命令 → 跑脚本 → 自动化部署”的命令行思维。我到现在还记得第一次用 Chocolatey 一次性装完十几个开发工具时的那种畅快感那种“以后不用再为装软件浪费时间”的确定性是手动安装给不了的。目前我已经习惯把 Chocolatey 作为 Windows 新机器的第一件事装完系统、装完 Chocolatey、写一个初始化脚本、跑一圈开发环境基本就绪。对于维护多台 Windows 设备的人来说这个流程节省的时间是肉眼可见的。如果你还在花大把时间手动装软件认真花十分钟把 Chocolatey 装好后面每次装软件都会快上十倍。这就是我在各个环境里反复验证后的结论——先花一点时间把工具链搭好之后所有和软件安装相关的工作都会变得很轻松。
返回列表