查看: 123|回复: 1

Chocolatey包管理器自定义安装与初始化配置实战

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
Chocolatey 是 Windows 环境下最流行的包管理器之一,功能类似于 Linux 上的 apt 或 macOS 上的 Homebrew。它允许开发者通过命令行快速安装、更新和卸载软件包,并自动处理依赖关系,特别适合自动化部署和企业环境。但默认安装路径在系统盘,且使用国外源速度较慢。本文提供一套完整的 Chocolatey 自定义安装与初始化配置方案,包括修改安装目录、切换国内镜像源、配置环境变量和 PowerShell 自动补全等。

首先,准备好 Windows PowerShell 和文本编辑器(如记事本或 VS Code)。所有操作均需以管理员身份运行 PowerShell,并确保网络连接正常。

第一步,创建安装与配置脚本。将以下内容保存为 Setup-Chocolatey.ps1(注意后缀为 .ps1),编码可使用 UTF-8 with BOM。
  1. # =============================
  2. # Chocolatey 安装与初始化配置脚本
  3. # =============================
  4. Set-ExecutionPolicy Bypass -Scope CurrentUser -Force
  5. $chocoInstallPath = "D:\Chocolatey"
  6. [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
  7. Write-Host "⚙️ 正在下载并运行 Chocolatey 官方安装脚本..." -ForegroundColor Cyan
  8. Invoke-Expression ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
  9. if (Test-Path "C:\ProgramData\chocolatey") {
  10.     Write-Host "🚚 正在将 Chocolatey 移动到 $chocoInstallPath ..." -ForegroundColor Cyan
  11.     Move-Item -Path "C:\ProgramData\chocolatey" -Destination $chocoInstallPath -Force
  12. }
  13. Write-Host "⚙️ 设置 ChocolateyInstall 环境变量..." -ForegroundColor Cyan
  14. [Environment]::SetEnvironmentVariable("ChocolateyInstall", $chocoInstallPath, "Machine")
  15. $env:ChocolateyInstall = $chocoInstallPath
  16. Write-Host "⚙️ 正在配置 Chocolatey 使用国内镜像源(清华大学)..." -ForegroundColor Cyan
  17. choco source add -n=china -s="https://mirrors.tuna.tsinghua.edu.cn/Chocolatey"
  18. choco config set --name="'sourcePriority'" --value="'china'"
  19. Write-Host "⚙️ 配置系统 PATH 环境变量..." -ForegroundColor Cyan
  20. $systemPath = [Environment]::GetEnvironmentVariable("Path", "Machine")
  21. $chocoBinPath = Join-Path $chocoInstallPath 'bin'
  22. if ($systemPath -notlike "*$chocoBinPath*") {
  23.     $newSystemPath = "$systemPath;$chocoBinPath"
  24.     [Environment]::SetEnvironmentVariable("Path", $newSystemPath, "Machine")
  25.     Write-Host "✅ 已将 Chocolatey 添加到系统 PATH。" -ForegroundColor Green
  26. } else {
  27.     Write-Host "ℹ️ Chocolatey 已存在于系统 PATH 中。" -ForegroundColor Yellow
  28. }
  29. Write-Host "⚙️ 配置 PowerShell Tab 补全支持..." -ForegroundColor Cyan
  30. $profileDir = "$env:USERPROFILE\Documents\WindowsPowerShell"
  31. $profileFile = "$profileDir\Microsoft.PowerShell_profile.ps1"
  32. if (-not (Test-Path $profileDir)) {
  33.     New-Item -ItemType Directory -Path $profileDir -Force | Out-Null
  34. }
  35. if (-not (Test-Path $profileFile)) {
  36.     New-Item -ItemType File -Path $profileFile -Force | Out-Null
  37.     Add-Content -Path $profileFile -Value "Import-Module `$env:ChocolateyInstall\helpers\chocolateyProfile.psm1"
  38.     Write-Host "✅ 已创建 PowerShell 配置文件并启用 Tab 补全。" -ForegroundColor Green
  39. } else {
  40.     if ((Get-Content $profileFile) -notcontains "Import-Module `$env:ChocolateyInstall\helpers\chocolateyProfile.psm1") {
  41.         Add-Content -Path $profileFile -Value "Import-Module `$env:ChocolateyInstall\helpers\chocolateyProfile.psm1"
  42.         Write-Host "✅ 已更新 PowerShell 配置文件并启用 Tab 补全。" -ForegroundColor Green
  43.     } else {
  44.         Write-Host "ℹ️ PowerShell 配置文件已包含 Chocolatey 补全模块。" -ForegroundColor Yellow
  45.     }
  46. }
  47. Write-Host "⚙️ 正在启用 Chocolatey 支持的功能..." -ForegroundColor Cyan
  48. choco feature enable -n=allowGlobalConfirmation
  49. Write-Host '✅ 所有设置已完成。请关闭并重新打开 PowerShell 窗口使更改生效。' -ForegroundColor Green
  50. Write-Host '💡 你现在可以使用 choco 命令安装软件包,例如:' -ForegroundColor Cyan
  51. Write-Host '    choco install git -y' -ForegroundColor Yellow
复制代码

第二步,以管理员身份运行 PowerShell(右键点击开始菜单中的“Windows 终端”或“PowerShell”,选择“以管理员身份运行”)。

第三步,在管理员 PowerShell 中导航到脚本所在目录,例如:
  1. cd D:\Scripts
复制代码

然后执行脚本:
  1. .\Setup-Chocolatey.ps1
复制代码

脚本执行过程中会自动从官方下载安装器、移动 Chocolatey 到 D:\Chocolatey、添加国内镜像源、配置系统 PATH 以及 PowerShell 配置文件。脚本最后会提示重启 PowerShell 使所有设置生效。

第四步,验证安装。关闭所有 PowerShell 窗口,重新以管理员身份打开新的 PowerShell,依次执行以下命令检查。

查看版本:
  1. choco -v
复制代码

正常应显示类似 2.4.3 的版本号。

检查安装路径环境变量:
  1. echo $env:ChocolateyInstall
复制代码

应输出 D:\Chocolatey。

确认 PATH 中包含 Chocolatey bin 目录:
  1. $env:Path -split ';' | Select-String 'D:\\Chocolatey\\bin'
复制代码

如果输出匹配项,说明路径已正确配置。

常见问题与解决方法:

- 运行脚本时出现“无法加载文件...未签名”错误:这是 PowerShell 执行策略限制所致。可在管理员 PowerShell 中执行以下命令临时允许脚本运行:
  1. Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
复制代码

- 运行 choco 命令报错提示找不到命令:通常是因为 PATH 环境变量未生效。首先检查 $env:ChocolateyInstall 是否指向正确路径,然后确保 D:\Chocolatey\bin 已加入系统 PATH。若修改后仍无效,可尝试关闭并重新打开 PowerShell 窗口,或手动刷新 PATH:
  1. $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
复制代码

- PowerShell 无法识别 choco 命令(即使版本命令正常):可能是 PowerShell 缓存未更新,重新启动终端即可。

通过以上配置,Chocolatey 已实现自定义安装目录、国内镜像加速、环境变量自动注册以及 PowerShell 命令补全。此后即可使用 choco install、choco upgrade、choco uninstall 等命令高效管理 Windows 软件包,极大提升开发效率。
回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Chocolatey包管理器自定义安装与初始化配置实战

感谢楼主分享这么详细的教程!之前一直用默认安装,系统盘确实越来越臃肿,而且官方源经常抽风。你提供的脚本把修改目录、换国内源、自动补全都整合在一起,省了不少手动配置的功夫。 有个小问题想请教:脚本里移动 Chocolatey 文件夹时,如果目标目录 `D:\Chocolatey` 已经存在(比如之前装过其他版本),`Move-Item` 会直接覆盖还是报错?是否需要先加个判断清空目标目录?另外,`::SetEnvironmentVariable` 这种调用方式在 PowerShell 里写全 `::SetEnvironmentVariable` 会不会更规范一些?新手可能容易混淆。 再次感谢,已经收藏准备实战了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-5 20:08 , Processed in 0.046194 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部