第一次接触Chocolatey时,我就被它的命令行安装方式惊艳到了。但真正让我离不开它的,其实是批量管理软件和自动化脚本的能力。想象一下,新电脑到手后只需要运行一个脚本,就能自动安装所有常用工具,这种效率提升是传统安装方式无法比拟的。
批量安装软件最简单的操作就是在install后面罗列多个包名。比如要一次性安装开发环境常用工具,可以这样写:
powershell复制choco install git vscode python docker-desktop -y
这个命令会依次安装Git、VS Code、Python和Docker Desktop,-y参数表示自动确认所有安装提示。我习惯把这类命令保存为dev-setup.ps1脚本,重装系统时直接运行。
更专业的做法是使用包列表文件。先创建一个packages.config文件:
xml复制<?xml version="1.0"?>
<packages>
<package id="firefox" />
<package id="vlc" version="3.0.18" />
<package id="7zip" />
</packages>
然后通过命令批量安装:
powershell复制choco install packages.config -y
这种方式特别适合企业IT部门部署标准化办公环境。我曾经用这个方法在50台新电脑上统一安装了办公套件,整个过程只用了不到半小时。
刚开始用Chocolatey时,我最常遇到的就是安装权限问题。比如尝试安装Ditto时出现的经典错误:
code复制对路径"C:\ProgramData\chocolatey\.chocolatey"的访问被拒绝
这个问题的根源在于Chocolatey需要向系统目录写入文件。解决方法很简单:
Get-ExecutionPolicy检查策略powershell复制Set-ExecutionPolicy AllSigned -Scope Process
另一个常见问题是下载速度慢或超时。这是因为默认源在国外,可以通过切换镜像源解决:
powershell复制choco source add -n=mirror -s="https://mirrors.tuna.tsinghua.edu.cn/chocolatey"
choco source remove -n=chocolatey
我测试过清华镜像源,下载速度能从20KB/s提升到2MB/s以上。
当遇到安装包哈希校验失败时,可以尝试:
powershell复制choco install <package> --ignore-checksums
但要注意这会影响安全性,建议只在确认包源可信时使用。
在公司环境部署Chocolatey需要考虑更多因素。首先是安装源的权限控制,建议搭建内部私有源:
powershell复制choco push MyPackage.1.0.nupkg -s="\\internal-server\choco-repo"
这样既能保证下载速度,又能统一管理软件版本。
对于需要许可证的软件,可以通过-params参数传递序列号:
powershell复制choco install some-software -y --params="'/LicenseKey:XXXX-XXXX-XXXX'"
我还开发过一个自动巡检脚本,每天检查所有电脑的软件状态:
powershell复制$computers = Get-Content .\computer-list.txt
foreach ($pc in $computers) {
Invoke-Command -ComputerName $pc -ScriptBlock {
choco outdated
}
}
这个脚本会生成报告,列出所有需要更新的软件。
Chocolatey有个不太为人知但超级实用的功能——软件降级。当新版软件出现兼容性问题时,可以这样回退:
powershell复制choco install python --version=3.9.0
对于需要特定依赖的软件,可以用--force-dependencies强制安装指定版本:
powershell复制choco install nodejs --version=14.17.0 --force-dependencies
我最近还发现一个神器chocolatey.config文件,可以全局配置代理、缓存等参数。我的配置是这样的:
xml复制<chocolatey xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<config>
<add key="cacheLocation" value="D:\choco-cache" />
<add key="commandExecutionTimeoutSeconds" value="3600" />
</config>
</chocolatey>
这些技巧都是我在管理200多台开发机时积累的实战经验。记得有次遇到一个棘手的字体包安装问题,最终是通过--install-arguments参数解决了依赖冲突。这种灵活度正是Chocolatey最强大的地方。