跳转到内容
关系图谱

Scoop

5,558 字 21 分钟

Scoop

Scoop 是一个 Windows 命令行软件包管理器,灵感来自 Homebrew。它通过简洁的命令行界面安装和管理"便携式"应用程序,无需 UAC 弹窗提示、不污染系统 PATH、不修改 Windows 注册表。

相关笔记

安装

前置条件

  • PowerShell 5.1+(Windows 10/11 自带,Windows 7/8 需安装 WMF 5.1
  • 执行策略允许运行本地脚本

安装步骤

powershell
# 1. 设置 PowerShell 执行策略(仅需执行一次)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

# 2. 安装 Scoop
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

自定义安装路径

powershell
# 安装到自定义目录(需在安装前设置环境变量)
$env:SCOOP = 'D:\Scoop'
[Environment]::SetEnvironmentVariable('SCOOP', $env:SCOOP, 'User')

# 全局安装路径(需管理员权限)
$env:SCOOP_GLOBAL = 'D:\ScoopGlobal'
[Environment]::SetEnvironmentVariable('SCOOP_GLOBAL', $env:SCOOP_GLOBAL, 'Machine')
注意

Unrestricted 策略也能工作,但安全性较低。建议使用 RemoteSigned


目录结构

Scoop 默认安装在 C:\Users\<用户名>\scoop,目录布局如下:

scoop/
├── apps/           # 已安装的应用程序
│   ├── scoop/      # Scoop 自身
│   ├── git/        # 示例:Git
│   │   ├── 2.53.0/ # 特定版本目录
│   │   └── current # 指向当前版本的 junction(符号链接)
│   └── ...
├── buckets/        # Bucket 仓库(Git 克隆)
│   ├── main/       # 默认 bucket
│   ├── extras/     # extras bucket
│   └── ...
├── cache/          # 下载缓存(安装包、哈希文件)
├── persist/        # 持久化数据(配置文件、用户数据)
├── shims/          # Shim 可执行文件(统一入口)
├── modules/        # PowerShell 模块
└── workspace/      # 工作区(用于开发自定义 manifest)
关键路径
  • apps/<app>/current — 始终指向当前激活版本的 junction
  • persist/<app> — 应用的持久化数据,更新时不会丢失
  • shims/ — 所有应用的 shim 都集中在此,已自动加入 PATH

核心概念

Bucket(仓库)

Bucket 是包含应用 manifest(JSON 描述文件)的 Git 仓库。Scoop 通过 bucket 查找和安装应用。

官方 bucket:

Bucket说明
main默认 bucket,命令行工具为主
extrasGUI 应用和非 main 标准的工具
versions软件的历史版本或替代版本
nerd-fontsNerd Fonts 补丁字体
nonportable需要管理员权限的非便携应用
javaJDK/JRE 等 Java 相关工具
games开源/免费游戏和游戏工具
powershell
# 添加 bucket
scoop bucket add extras
scoop bucket add versions
scoop bucket add nerd-fonts

# 添加第三方 bucket(需提供 Git URL)
scoop bucket add <name> <git-url>

# 列出已添加的 bucket
scoop bucket list

# 查看已知的官方 bucket
scoop bucket known

# 移除 bucket
scoop bucket rm <name>

Manifest(清单文件)

Manifest 是描述应用安装方式的 JSON 文件,包含以下关键字段:

json
{
  "version": "1.0.0",
  "description": "应用描述",
  "homepage": "https://example.com",
  "license": "MIT",
  "url": "https://example.com/app-1.0.0.zip",
  "hash": "sha256:abc123...",
  "bin": "app.exe",
  "shortcuts": [["app.exe", "App Name"]],
  "persist": ["config", "data"],
  "env_add_path": "bin",
  "env_set": { "APP_HOME": "$dir" },
  "depends": ["git"],
  "suggest": { "vcredist": "extras/vcredist2022" },
  "pre_install": ["命令..."],
  "post_install": ["命令..."],
  "installer": { "script": ["..."] },
  "uninstaller": { "script": ["..."] },
  "architecture": {
    "64bit": { "url": "...", "hash": "..." },
    "32bit": { "url": "...", "hash": "..." },
    "arm64": { "url": "...", "hash": "..." }
  },
  "autoupdate": {
    "url": "https://example.com/app-$version.zip"
  },
  "checkver": {
    "url": "https://example.com/releases",
    "regex": "v([\\d.]+)"
  }
}
Manifest 关键字段说明
  • url / hash — 下载地址和校验哈希(支持 sha256/sha512/md5)
  • bin — 需要创建 shim 的可执行文件
  • shortcuts — 开始菜单快捷方式
  • persist — 需要在更新时保留的文件/目录
  • env_add_path — 添加到 PATH 的子目录
  • env_set — 设置的环境变量($dir 代表安装目录)
  • depends — 依赖的其他应用
  • architecture — 按 CPU 架构区分的下载地址
  • checkver / autoupdate — 自动检测新版本和更新 URL

Shim(垫片)

Shim 是 Scoop 创建的小型可执行代理文件,统一放在 shims/ 目录下。

工作原理:

  1. 安装应用时,Scoop 在 shims/ 目录为每个 bin 入口创建一个 shim
  2. shims/ 目录已加入用户 PATH
  3. 运行命令时,shim 将调用转发到实际的应用可执行文件
  4. 更新应用时,shim 自动指向新版本,无需修改 PATH

Shim 的优势:

  • 避免将每个应用目录都添加到 PATH(防止 PATH 膨胀)
  • 应用更新时无需重新配置环境变量
  • 支持控制台应用(.exe)和 GUI 应用(.exe 以窗口模式运行)
powershell
# 列出所有 shim
scoop shim list

# 手动添加 shim
scoop shim add <name> <command_path>

# 移除 shim
scoop shim rm <name>

# 修改 shim 指向
scoop shim alter <name>

Persist(持久化)

persist/ 目录用于存储应用的持久化数据(配置文件、数据库、用户数据等),确保应用更新或重装时数据不丢失。

工作原理:

  1. 首次安装时,Scoop 将 manifest 中 persist 指定的文件/目录移动到 persist/<app>/
  2. 在应用安装目录中创建 junction(目录联接)指向 persist/<app>/ 中的对应位置
  3. 更新应用时,新版本自动通过 junction 链接到同一持久化数据

命令大全

应用安装与卸载

powershell
# 安装应用
scoop install <app>                    # 从已添加的 bucket 安装
scoop install extras/<app>             # 指定 bucket 安装
scoop install https://example.com/app.json  # 从 URL 安装
scoop install .\app.json               # 从本地 manifest 安装

# 全局安装(需管理员权限,所有用户可用)
sudo scoop install <app> --global      # 或 -g

# 安装特定架构
scoop install <app> --arch 64bit       # 或 32bit、arm64

# 卸载应用
scoop uninstall <app>
scoop uninstall <app> --global         # 卸载全局安装的应用
scoop uninstall <app> --purge          # 同时删除持久化数据

更新与版本管理

powershell
# 更新 Scoop 自身
scoop update

# 更新指定应用
scoop update <app>

# 更新所有已安装应用
scoop update *

# 锁定应用版本(禁止更新)
scoop hold <app>

# 解锁应用版本(允许更新)
scoop unhold <app>

# 切换/重置应用版本
scoop reset <app>                      # 重置 shim 和环境变量
scoop reset python27 python            # 在多版本间切换

查询与信息

powershell
# 搜索应用
scoop search <query>

# 查看应用详细信息
scoop info <app>

# 查看已安装应用列表
scoop list

# 查看应用状态(可用更新等)
scoop status

# 查看应用清单(manifest 原始 JSON)
scoop cat <app>

# 打开应用主页
scoop home <app>

# 查看应用依赖
scoop depends <app>

# 定位可执行文件路径
scoop which <command>

# 获取应用安装目录前缀
scoop prefix <app>

清理与维护

powershell
# 清理旧版本(释放磁盘空间)
scoop cleanup <app>
scoop cleanup *                        # 清理所有应用的旧版本

# 清理下载缓存
scoop cache rm <app>
scoop cache rm *                       # 清空所有缓存

# 查看缓存内容
scoop cache show

# 系统健康检查
scoop checkup

导入与导出

powershell
# 导出已安装应用、bucket 和配置到 JSON(Scoopfile)
scoop export > scoopfile.json

# 导出时包含配置信息
scoop export --config > scoopfile.json

# 从 Scoopfile 导入
scoop import scoopfile.json
Scoopfile 格式示例
json
{
  "buckets": [
    { "Name": "main", "Source": "https://github.com/ScoopInstaller/Main" },
    { "Name": "extras", "Source": "https://github.com/ScoopInstaller/Extras" }
  ],
  "apps": [
    { "Name": "git", "Source": "main", "Updated": "2026-01-15" },
    { "Name": "vscode", "Source": "extras", "Updated": "2026-01-20" }
  ]
}

安全验证

powershell
# 在 VirusTotal 上查询应用哈希
scoop virustotal <app>

# 查询所有已安装应用
scoop virustotal *

别名管理

powershell
# 添加自定义别名
scoop alias add <name> <command> <description>

# 示例:创建 "upgrade" 别名
scoop alias add upgrade "scoop update *" "更新所有应用"

# 列出已有别名
scoop alias list

# 移除别名
scoop alias rm <name>

下载(不安装)

powershell
# 仅下载应用到缓存并验证哈希
scoop download <app>

配置

Scoop 配置文件位于 ~/.config/scoop/config.json,可通过 scoop config 命令管理。

常用配置

powershell
# 查看所有配置
scoop config

# 读取单个配置项
scoop config <key>

# 设置配置项
scoop config <key> <value>

# 移除配置项
scoop config rm <key>

配置项一览

配置项默认值说明
proxy(空)代理地址,格式 [user:pass@]host:port
default_architecture64bit默认安装架构(64bit/32bit/arm64
use_external_7zipfalse使用外部 7zip 解压
use_sqlite_cachefalse启用 SQLite 缓存加速搜索
no_junctionfalse禁用 current 版本 junction
scoop_repo(默认)自定义 Scoop 源码 Git 仓库地址
scoop_branchmaster自定义 Scoop 源码分支
use_isolated_pathfalse隔离应用 PATH 到独立环境变量 SCOOP_PATH
aria2-enabledtrue启用 aria2 多线程下载
aria2-warning-enabledtrue显示 aria2 警告信息
aria2-retry-wait2aria2 重试等待时间(秒)
aria2-split5aria2 下载分片数
aria2-max-connection-per-server5aria2 单服务器最大连接数
aria2-min-split-size5Maria2 最小分片大小
aria2-options(空)aria2 额外参数
show_update_logtrue更新后显示变更日志
last_update(自动)上次更新时间戳

Aria2 多线程下载

安装 aria2 后,Scoop 会自动使用多线程下载以提升速度。

powershell
# 安装 aria2
scoop install aria2

# 配置多线程参数(按需调整)
scoop config aria2-split 16
scoop config aria2-max-connection-per-server 16
scoop config aria2-min-split-size 1M

# 如果遇到下载问题,可临时禁用 aria2
scoop config aria2-enabled false

# 关闭 aria2 运行警告
scoop config aria2-warning-enabled false
性能优化

对于国内网络环境,建议将 aria2-splitaria2-max-connection-per-server 设为 16aria2-min-split-size 设为 1M,以获得更好的下载速度。


代理配置

powershell
# 设置 HTTP 代理
scoop config proxy 127.0.0.1:7890

# 设置带认证的代理
scoop config proxy user:password@127.0.0.1:7890

# 使用系统代理
scoop config proxy currentuser@default

# 移除代理配置
scoop config rm proxy

多版本共存

Scoop 支持同时安装同一软件的多个版本,并通过 reset 命令切换。

powershell
# 安装多个 Python 版本
scoop install python
scoop install versions/python312

# 切换到 Python 3.12
scoop reset python312

# 切换回最新版
scoop reset python

# 查看当前激活的版本
python --version
实现原理

scoop reset 会重新创建 shim 和更新环境变量,使指定版本成为当前活跃版本。两个版本的文件仍然同时存在于 apps/ 目录中。


创建自定义 Manifest

当需要安装 Scoop 仓库中没有的软件时,可以创建自定义 manifest。

最小化 Manifest

json
{
  "version": "1.0.0",
  "description": "我的自定义工具",
  "homepage": "https://example.com",
  "license": "MIT",
  "url": "https://example.com/tool-1.0.0.zip",
  "hash": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  "bin": "tool.exe"
}

安装本地 Manifest

powershell
# 直接安装本地 JSON 文件
scoop install .\my-app.json

创建自己的 Bucket

powershell
# 1. 创建 Git 仓库
git init my-bucket
cd my-bucket
mkdir bucket

# 2. 将 manifest JSON 文件放入 bucket/ 目录

# 3. 推送到远程仓库后添加
scoop bucket add my-bucket https://github.com/user/my-bucket

哈希值计算

powershell
# 使用 PowerShell 计算 SHA256
(Get-FileHash .\file.zip -Algorithm SHA256).Hash.ToLower()

# 或使用 certutil
certutil -hashfile .\file.zip SHA256

常用技巧

加速搜索

powershell
# 安装搜索加速工具
scoop install scoop-search   # Go 编写的快速搜索替代
scoop install sfsu            # Rust 编写的 Scoop 命令加速器

# 启用 SQLite 缓存(内置加速方式)
scoop config use_sqlite_cache true

批量安装(脚本化部署)

powershell
# 方式一:单行安装多个应用
scoop install git nodejs-lts python vscode

# 方式二:使用 Scoopfile 导入
scoop export > scoopfile.json   # 在源机器上导出
scoop import scoopfile.json     # 在目标机器上导入

# 方式三:Shell 脚本
@('git', 'nodejs-lts', 'python', 'vscode') | ForEach-Object {
    scoop install $_
}

全局安装与权限

powershell
# 安装 gsudo(Windows 版 sudo)
scoop install gsudo

# 全局安装(所有用户可用)
sudo scoop install git --global

# 全局安装的应用位于 $env:SCOOP_GLOBAL(默认 C:\ProgramData\scoop)

修复常见问题

powershell
# 运行健康检查
scoop checkup

# 重置损坏的应用(修复 shim 和 junction)
scoop reset <app>

# 强制更新 Scoop
scoop update --force

# 重新注册所有 shim
scoop reset *

与其他包管理器对比

特性ScoopChocolateywinget
安装方式解压便携应用运行安装脚本调用系统安装器
需要管理员通常不需要通常需要部分需要
注册表修改不修改可能修改可能修改
应用类型命令行/便携优先全类型全类型
PATH 管理Shim 机制直接添加 PATH系统安装器决定
更新管理scoop updatechoco upgradewinget upgrade
卸载干净度极高(删目录即可)依赖卸载脚本依赖系统卸载
离线支持可缓存安装包支持有限
自定义仓库容易(Git 仓库)较复杂较复杂
Scoop 的核心优势
  • 干净:所有文件集中在 scoop/ 目录,不污染系统
  • 便携:基于 zip 解压,无需安装器
  • 可控:shim + junction 机制,轻松管理多版本
  • 可复现export / import 实现环境一键复制

内部工作原理

Scoop 的安装流程(install_app())按以下顺序执行:

  1. 解析 Manifest — 通过 Get-Manifest 获取并解析 JSON 清单
  2. 下载安装包 — 调用 Invoke-ScoopDownload(支持 aria2 加速)
  3. 校验哈希 — 比对下载文件的 hash 值确保完整性
  4. 解压文件 — 通过 Invoke-Extraction 解压到 apps/<app>/<version>/
  5. 执行 pre_install — 运行预安装钩子脚本
  6. 运行安装器 — 若 manifest 定义了 installer,执行安装命令
  7. 创建 Shim — 为 bin 中指定的可执行文件创建 shim
  8. 创建快捷方式 — 在开始菜单创建 shortcuts 定义的快捷方式
  9. 持久化数据 — 将 persist 指定的文件/目录移至 persist/<app>/ 并创建 junction
  10. 设置环境变量 — 处理 env_add_pathenv_set
  11. 执行 post_install — 运行后安装钩子脚本
  12. 创建 current junction — 将 apps/<app>/current 指向当前版本目录
  13. 保存安装信息 — 记录安装元数据

常见问题

Scoop 安装失败

powershell
# 检查 PowerShell 版本
$PSVersionTable.PSVersion

# 确保执行策略正确
Get-ExecutionPolicy -List
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

下载速度慢

powershell
# 配置代理
scoop config proxy 127.0.0.1:7890

# 启用 aria2 多线程
scoop install aria2
scoop config aria2-split 16
scoop config aria2-max-connection-per-server 16

应用无法运行

powershell
# 重置 shim
scoop reset <app>

# 检查依赖(如 VC++ 运行时)
scoop checkup

# 安装常见运行时
scoop install vcredist2022

Hash 校验失败

powershell
# 跳过哈希校验安装(不推荐)
scoop install <app> --skip

# 清除缓存后重试
scoop cache rm <app>
scoop install <app>

更新 Scoop 自身出错

powershell
# 强制重置 Scoop 仓库
cd $env:SCOOP\apps\scoop\current
git fetch --all
git reset --hard origin/master

环境迁移与备份

方案一:Scoopfile 导入/导出(推荐)

最简洁的迁移方式,适用于跨机器复制开发环境。

powershell
# === 源机器 ===
# 导出全部已安装应用和 bucket 信息
scoop export > scoopfile.json

# === 目标机器 ===
# 1. 安装 Scoop
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

# 2. 安装 Git(Scoop 的 bucket 管理依赖 Git)
scoop install git

# 3. 导入 Scoopfile
scoop import scoopfile.json

方案二:整体目录迁移

适用于需要保留持久化数据和缓存的场景。

powershell
# 1. 复制整个 scoop 目录到目标机器
robocopy C:\Users\<用户名>\scoop D:\backup\scoop /MIR

# 2. 在目标机器上设置环境变量
$env:SCOOP = 'C:\Users\<用户名>\scoop'
[Environment]::SetEnvironmentVariable('SCOOP', $env:SCOOP, 'User')

# 3. 确保 shims 目录在 PATH 中
$shimPath = "$env:SCOOP\shims"
$oldPath = [Environment]::GetEnvironmentVariable("Path", "User")
if ($oldPath -notlike "*$shimPath*") {
    [Environment]::SetEnvironmentVariable("Path", "$oldPath;$shimPath", "User")
}

# 4. 重置所有 shim(修复路径引用)
scoop reset *

备份策略建议

最佳实践
  • 定期执行 scoop export > scoopfile.json 并纳入版本控制
  • persist/ 目录包含重要配置,建议单独备份
  • cache/ 目录可不备份(重新下载即可)
  • 参考 Windows Scoop 软件清单 维护一份人类可读的安装清单

热门第三方 Bucket

除官方 bucket 外,社区维护了大量第三方 bucket:

Bucket安装命令说明
doradoscoop bucket add dorado https://github.com/chawyehsu/dorado国人维护,大量中文软件
scoop-cnscoop bucket add scoop-cn https://github.com/duzyn/scoop-cn国内软件集合
nerd-fontsscoop bucket add nerd-fontsNerd Fonts 补丁字体(官方)
nonportablescoop bucket add nonportable需要管理员权限的应用(官方)
sysinternalsscoop bucket add sysinternals https://github.com/niheaven/scoop-sysinternals微软 Sysinternals 工具集
查找更多 Bucket
  • Scoop Directory — 按 GitHub 评分排序的 bucket 目录
  • 使用 scoop search <app> 会同时搜索所有已添加的 bucket

Manifest 高级特性

autoupdate(自动更新检测)

autoupdate 定义了 manifest 在检测到新版本后如何自动更新下载 URL 和哈希值。

json
{
  "autoupdate": {
    "architecture": {
      "64bit": {
        "url": "https://example.com/app-$version-x64.zip"
      },
      "32bit": {
        "url": "https://example.com/app-$version-x86.zip"
      }
    },
    "hash": {
      "url": "$url.sha256"
    }
  }
}

可用变量:

  • $version — 完整版本号(如 1.2.3
  • $url — 解析后的下载地址
  • $baseurl — URL 去掉文件名的部分
  • $matches[n]checkver 正则的捕获组

checkver(版本检测)

checkver 告诉 Scoop 如何从网页上检测应用的最新版本。

json
{
  "checkver": {
    "url": "https://api.github.com/repos/user/repo/releases/latest",
    "jsonpath": "$.tag_name",
    "regex": "v([\\d.]+)"
  }
}

支持的匹配方式:

  • regex — 正则表达式匹配
  • jsonpath — JSON 路径查询(适用于 API 返回 JSON 的场景)
  • xpath — XPath 查询(适用于 HTML/XML)
  • github — GitHub Release 的快捷方式,等价于 "checkver": "github"
  • replace — 对匹配结果进行替换转换
powershell
# 手动运行版本检测(bucket 维护者常用)
cd $env:SCOOP\buckets\main
.\bin\checkver.ps1 <app>

# 检测并自动更新 manifest
.\bin\checkver.ps1 <app> -u

pre_install / post_install 钩子

manifest 支持在安装前后执行自定义 PowerShell 脚本:

json
{
  "pre_install": ["if (!(Test-Path \"$persist_dir\\config\")) { New-Item -Type Directory \"$persist_dir\\config\" }"],
  "post_install": ["Write-Host '安装完成!请重启终端。' -ForegroundColor Green"]
}

钩子中可用的变量:

  • $dir — 应用安装目录
  • $persist_dir — 应用持久化目录
  • $version — 安装的版本号
  • $architecture — 安装架构
  • $cfg — Scoop 配置对象

国内加速方案

Git 仓库加速

由于 bucket 是 Git 仓库,国内用户克隆/更新时可能较慢。

powershell
# 方式一:配置代理
scoop config proxy 127.0.0.1:7890

# 方式二:使用 GitHub 镜像(部分镜像可能不稳定)
# 替换 bucket 的远程仓库地址
git -C "$env:SCOOP\buckets\main" remote set-url origin https://mirror.ghproxy.com/https://github.com/ScoopInstaller/Main
git -C "$env:SCOOP\buckets\extras" remote set-url origin https://mirror.ghproxy.com/https://github.com/ScoopInstaller/Extras

# 方式三:使用 Gitee 上的 Scoop 镜像(社区维护)
scoop config scoop_repo https://gitee.com/scoop-installer/scoop

下载加速

powershell
# 1. 启用 aria2 多线程下载
scoop install aria2
scoop config aria2-split 16
scoop config aria2-max-connection-per-server 16
scoop config aria2-min-split-size 1M

# 2. 配合代理使用
scoop config proxy 127.0.0.1:7890
注意

使用镜像时注意安全风险,尽量使用 Scoop 的哈希校验功能确保下载文件完整性。官方源 + 代理是最可靠的方案。


实战工作流

新机器环境搭建

一台全新 Windows 机器从零搭建开发环境的完整流程:

powershell
# === 第一步:安装 Scoop ===
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

# === 第二步:安装基础工具 ===
scoop install git        # Git 是 bucket 管理的前置依赖
scoop install aria2      # 多线程下载加速
scoop config aria2-split 16
scoop config aria2-max-connection-per-server 16

# === 第三步:添加常用 bucket ===
scoop bucket add extras
scoop bucket add versions
scoop bucket add nerd-fonts

# === 第四步:安装开发工具 ===
scoop install vscode nodejs-lts python pnpm uv
scoop install bat eza fd fzf ripgrep zoxide
scoop install starship alacritty

# === 第五步:安装字体 ===
scoop install JetBrainsMono-NF-Mono CascadiaCode-NF-Mono

# === 或者:直接从已有的 Scoopfile 导入 ===
scoop import scoopfile.json

日常更新维护

powershell
# 每周执行一次的维护命令
scoop update            # 更新 Scoop 自身和 bucket 索引
scoop status            # 查看哪些应用有新版本
scoop update *          # 更新所有应用
scoop cleanup *         # 清理旧版本释放空间
scoop cache rm *        # 清理下载缓存

调试应用问题

powershell
# 1. 确认应用信息
scoop info <app>                  # 查看版本、来源、依赖
scoop prefix <app>                # 获取安装目录
scoop which <command>             # 确认 shim 指向的实际路径

# 2. 检查 Scoop 健康状态
scoop checkup                     # 系统级健康检查

# 3. 尝试修复
scoop reset <app>                 # 重建 shim 和 junction
scoop uninstall <app>             # 卸载
scoop install <app>               # 重新安装

# 4. 查看 manifest 原始内容(排查安装行为)
scoop cat <app>

锁定关键工具版本

在团队协作中,某些工具需要固定版本以保持一致性:

powershell
# 锁定 Node.js 版本,防止自动更新
scoop hold nodejs-lts

# 查看所有被锁定的应用
scoop list | Select-String "Held"

# 解锁(允许再次更新)
scoop unhold nodejs-lts

安装特定历史版本

powershell
# 方式一:使用 versions bucket 中的历史版本包
scoop install versions/python312

# 方式二:从 Git 历史中安装指定版本的 manifest
# 1. 进入 bucket 目录
cd $env:SCOOP\buckets\main

# 2. 查找历史 manifest
git log --oneline -- bucket/<app>.json

# 3. 使用指定 commit 的 manifest
git show <commit>:bucket/<app>.json > $env:TEMP\<app>.json
scoop install $env:TEMP\<app>.json

PowerShell 集成

Tab 补全

Scoop 支持 PowerShell Tab 补全,在 $PROFILE 中添加:

powershell
# 添加 Scoop Tab 补全(将以下内容加入 $PROFILE)
Import-Module "$($(Get-Item $(Get-Command scoop.ps1).Path).Directory.Parent.FullName)\modules\scoop-completion" -ErrorAction SilentlyContinue

效果:输入 scoop in 后按 Tab 自动补全为 scoop install,输入 scoop install py 后按 Tab 列出匹配的应用名。

与 sfsu 加速器集成

sfsu 是 Rust 编写的 Scoop 命令加速替代,可大幅提升 searchlist 等命令速度。

powershell
# 安装 sfsu
scoop install sfsu

# 在 $PROFILE 中用 sfsu 替代部分 scoop 命令
Invoke-Expression (&sfsu hook)
sfsu 加速效果
  • scoop search → 从数秒缩短到毫秒级
  • scoop list → 显著加速
  • 其他命令仍由原始 Scoop 处理

实用 PowerShell 函数

可以将以下函数加入 $PROFILE,简化日常操作:

powershell
# 快速更新所有应用并清理
function Update-Scoop {
    scoop update
    scoop update *
    scoop cleanup *
    scoop cache rm *
    Write-Host "✔ Scoop 更新完成" -ForegroundColor Green
}

# 查看应用安装目录并用资源管理器打开
function Open-ScoopApp {
    param([string]$App)
    $path = scoop prefix $App
    if ($path) { explorer $path }
}

# 列出所有可更新的应用
function Get-ScoopUpdates {
    scoop update *> $null
    scoop status
}

命令速查表

快速参考

安装与卸载:

命令说明
scoop install <app>安装应用
scoop install -g <app>全局安装
scoop uninstall <app>卸载应用
scoop uninstall -p <app>卸载并清除持久化数据

更新与版本:

命令说明
scoop update更新 Scoop 和 bucket
scoop update <app>更新指定应用
scoop update *更新所有应用
scoop hold <app>锁定版本
scoop unhold <app>解锁版本
scoop reset <app>重置/切换版本

查询与信息:

命令说明
scoop search <query>搜索应用
scoop info <app>查看详细信息
scoop list列出已安装应用
scoop status查看可用更新
scoop cat <app>查看 manifest JSON
scoop home <app>打开应用主页
scoop which <cmd>定位命令路径
scoop prefix <app>获取安装目录
scoop depends <app>查看依赖

Bucket 管理:

命令说明
scoop bucket add <name>添加官方 bucket
scoop bucket add <name> <url>添加第三方 bucket
scoop bucket list列出已添加 bucket
scoop bucket known查看官方 bucket
scoop bucket rm <name>移除 bucket

维护与清理:

命令说明
scoop cleanup *清理所有旧版本
scoop cache rm *清空下载缓存
scoop cache show查看缓存内容
scoop checkup系统健康检查
scoop export导出安装清单
scoop import <file>导入安装清单
scoop virustotal *VirusTotal 安全扫描

配置:

命令说明
scoop config查看所有配置
scoop config <key> <value>设置配置项
scoop config rm <key>移除配置项
scoop config proxy <addr>设置代理

卸载 Scoop

保留数据的卸载

powershell
# 卸载所有已安装的应用
scoop list | ForEach-Object { scoop uninstall $_.Name }

# 卸载 Scoop 自身
scoop uninstall scoop

完全清除

powershell
# 1. 删除 Scoop 目录
Remove-Item -Recurse -Force $env:SCOOP

# 2. 删除全局安装目录(如果使用过)
Remove-Item -Recurse -Force $env:SCOOP_GLOBAL -ErrorAction SilentlyContinue

# 3. 清除环境变量
[Environment]::SetEnvironmentVariable('SCOOP', $null, 'User')
[Environment]::SetEnvironmentVariable('SCOOP_GLOBAL', $null, 'Machine')

# 4. 从 PATH 中移除 shims 路径
$userPath = [Environment]::GetEnvironmentVariable('Path', 'User')
$cleanPath = ($userPath -split ';' | Where-Object { $_ -notlike '*scoop*' }) -join ';'
[Environment]::SetEnvironmentVariable('Path', $cleanPath, 'User')

# 5. 删除配置文件
Remove-Item -Recurse -Force "$env:USERPROFILE\.config\scoop" -ErrorAction SilentlyContinue
注意

完全清除会删除 persist/ 目录中的所有持久化数据(配置文件、数据库等),操作前请确认已备份重要数据。


限制与不适用场景

Scoop 虽然优秀,但并非万能。了解其局限性有助于选择合适的工具。

Scoop 不擅长的场景

  • 需要系统级注册的应用(如驱动程序、系统服务)→ 使用 wingetchocolatey
  • 需要 Windows Installer(MSI)的企业软件(如 Office、Visual Studio)→ 使用 winget
  • 大型游戏和商业软件 → 使用 Steam、Microsoft Store 等专用平台
  • 需要内核级权限的安全软件(如杀毒软件、防火墙)→ 手动安装

已知限制

  • 不支持依赖自动卸载:卸载应用时不会自动卸载其依赖
  • 无事务机制:批量安装中途失败不会自动回滚
  • 路径长度限制:Windows 默认 260 字符路径限制可能影响深度嵌套的应用(可通过启用长路径支持解决)
  • 并发安装:不支持同时安装多个应用(需按顺序执行)

启用 Windows 长路径支持

powershell
# 以管理员身份运行
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1

参考链接