重要
- ① winget 软件包管理器所管理的很多软件包可能会托管在 GitHub 上,因此需要你科学上网;否则,可能会因为网络问题而导致软件包安装失败。
- ② Win10 之后的很多系统内置软件,是通过 winget 软件包管理器进行安装的。
第一章:简介
1.1 Linux 中的软件包管理器
- 如果你玩过 Linux,一定对 Linux 中的软件包管理器并不陌生,如:
apt和dnf等,其主要目标是用来解决依赖管理,简化软件包的安装。

1.2 Windows 中的软件包管理器
- Windows 操作系统本身就是以
图形用户界面(GUI)为主,早期大多数人都是通过鼠标下一步来安装软件包,Windows 上的软件包的格式通常是.exe、.msi以及.zip,一旦软件包更新之后(新版本的推出),还需要用户重新下载并进行安装,以便体验最新的功能。

- 但是,随着时间的发展,Windows 社区吸收了 Linux 社区的思想,将软件包管理器也带入了 Windows 中,这样在 Windows 中我们也可以通过命令行来安装软件包。
提醒
- ① 软件包管理器是 Windows 的附加工具,用户可以选择使用,也可以直接通过网页或商店安装软件包。
- ② 在 Windows 11、Windows 10 1709(版本 16299)或更高版本上以及 Windows Server 2025 中,Windows 开箱支持 WinGet 程序包管理器。
Linux 中的软件包管理器有多种,如:
dnf和apt等,Windows 也不例外,如下所示:- ①
winget(Windows Package Manager):Windows 官方支持,非常稳定。 - ②
Chocolatey:社区支持,但是维护的大量的软件包。 - ③
Scoop:社区支持,主打轻量化。 - ④
Ninite:一次性安装并更新所有程序(如果你不熟悉命令行,可以选择该工具)。
- ①
Windows 软件包管理器的特点,如下所示:
| Windows 软件包管理器 | 特点 |
|---|---|
| winget | ① 官方提供,由微软开发。 ② 命令行工具,可以快速安装、升级和卸载软件。 ③ 包含常见的第三方软件包。 |
| Chocolatey | ① 长期流行的第三方软件包管理器。 ② 支持许多开发工具、服务和常见软件。 ③ 提供商业版支持。 |
| Scoop | ① 专注于开发者工具,如:编程语言、数据库等。 ② 无需管理员权限即可安装。 ③ 使用简洁,易于扩展。 |
| Ninite | ① 简单易用,适合普通用户。 ② 自动化安装和更新常见软件,如:浏览器、媒体播放器等。 |
第二章:winget(🔥)
2.1 概述
- 开发人员可以使用
winget命令行工具发现、安装、升级、删除和配置特选应用程序集。 - 安装后,开发人员可以通过 Windows 终端、PowerShell 或命令提示符访问
winget。
2.2 工作原理
2.2.1 概述
winget(Windows Package Manager)是微软官方推出的 Windows 命令行软件包管理工具。- 它的核心设计理念是
作为系统原生安装程序的“调度器”和“清单管理器”,而不是自己去实现一套复杂的软件安装逻辑。
2.2.2 核心架构(清单(Manifest)驱动)
winget本身不包含任何软件的实体文件,它完全依赖于清单文件(Manifests),如下所示:
点我查看清单文件的具体细节
- ① 清单格式:清单是基于 YAML 格式的文本文件。
- ② 包含内容:软件名称、版本号、下载 URL、SHA256 哈希值、安装程序类型(MSI, EXE, MSIX 等)、以及 静默安装参数(如
/S,/quiet,/VERYSILENT)。 - ③ 数据源:默认情况下,
winget连接的是微软托管在 GitHub 上的开源仓库microsoft/winget-pkgs。社区和软件开发者通过提交 PR(Pull Request)来更新或添加这些 YAML 清单。

2.2.3 工作流程
- 当我们在终端输入
winget install <软件包>的时候,底层会经历以下流程,如下所示:
点我查看具体细节
A. 搜索与索引匹配:- ① 本地缓存查询:
winget客户端首先会查询本地的 SQLite 数据库缓存,看是否有匹配的清单。 - ② 远程同步:如果本地没有或缓存过期,客户端会通过 REST API(或 GitHub API)向远程源(Source)请求最新的索引数据,并更新本地缓存。
- ① 本地缓存查询:
B. 下载与安全检查(核心安全机制):- ① 获取下载链接:从匹配的 YAML 清单中提取安装包的下载 URL。
- ② 下载文件:将安装包(.exe, .msi, .msix 等)下载到系统的临时目录(通常是
%TEMP%\WinGet)。 - ③ 哈希校验:下载完成后,
winget会计算该文件的 SHA256 哈希值,并与清单中声明的哈希值进行严格比对。如果不一致,安装会立即中止。这确保了下载的文件没有被篡改或损坏。
C. 执行安装(调度器角色):winget本身 不负责 解压、释放文件或写入注册表(便携版 ZIP 除外),它是调用 Windows 原生的安装机制。文件类型 描述 MSI 文件 调用系统自带的 msiexec.exe,并附加清单中定义的静默参数。MSIX / APPX 文件 调用 Windows 的 MSIX 部署 API 进行沙盒或系统级安装。 EXE 文件 winget会读取清单中针对该特定安装程序预设的“静默安装开关(Silent Switches)”,然后直接执行该 EXE。ZIP 文件(Portable 便携版) 只有对于标记为 portable的 ZIP 包,winget才会自己将其解压到指定目录(如%LOCALAPPDATA%\Microsoft\WinGet\Packages),并自动将其加入系统的PATH环境变量。D. 状态追踪与验证:安装程序运行结束后,winget需要确认软件是否真的安装成功了- ① 读取 ARP:
winget会扫描 Windows 的“添加或删除程序”(Add/Remove Programs, ARP)注册表项。 - ② 匹配产品代码:它会将清单中声明的
ProductCode(针对 MSI)或Display Name与 ARP 中的记录进行匹配。如果找到了对应记录,则认为安装成功,并将其记录到winget本地的installed.db数据库中。
- ① 读取 ARP:
2.3 启用 tab 自动补全(仅限于 PowerShell)
2.3.1 PowerShell 修改安全策略
- ① 使用
win + x快捷键,选择Windows PowerShell(管理员):
powershell
win + x1

- ② 修改安全策略:
powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned1

- ③ 关闭终端,并重新打开:

2.3.2 启用 Tab 自动补全
- ① 打开 PowerShell,并输入以下命令,在记事本中打开
$PROFILE:
powershell
notepad.exe $PROFILE1

- ② 将以下脚本复制并粘贴到已在记事本中打开的
$PROFILE文件,保存并关闭 PowerShell:
powershell
Register-ArgumentCompleter -Native -CommandName winget -ScriptBlock {
param($wordToComplete, $commandAst, $cursorPosition)
[Console]::InputEncoding = [Console]::OutputEncoding = $OutputEncoding = [System.Text.Utf8Encoding]::new()
$Local:word = $wordToComplete.Replace('"', '""')
$Local:ast = $commandAst.ToString().Replace('"', '""')
winget complete --word="$Local:word" --commandline "$Local:ast" --position $cursorPosition | ForEach-Object {
[System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
}
}1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9

- ③ 重新打开 PowerShell,就会发现
winget tab可以自动补全:

2.4 软件管理(CRUD)
2.4.1 搜索软件
- 格式:
shell
winget search [可选参数] [-q] <软件名>1
提醒
参数:
-q、--query:查询标志是用于搜索应用的默认参数。无需指定。
可选参数:
--id:将搜索限制为应用程序的 ID。该 ID 包含发布者和应用程序名称。--name:将搜索限制为应用程序的名称。-s、--source:使用指定的源名称(msstore 等)查找包。--versions:显示程序包的可用版本。
- 示例:查询指定的软件包
cmd
winget search nodejs1

- 示例:根据 id 查询指定的软件包
cmd
winget search --id OpenJS.NodeJS1

- 示例:根据 name 查询指定的软件包
cmd
winget search --name Node.js1

- 示例:查询所有可用的软件包
cmd
winget search -q ""1

- 示例:跨源搜索(结果范围缩小到特定源)
cmd
winget search "Visual Studio Code" -s msstore1

- 示例:显示软件包的所有可用版本(软件包需要精确匹配)
cmd
winget search --id Microsoft.PowerToys --versions1

2.4.2 安装软件
- 格式:
shell
winget install [可选参数] [-q] <软件名>1
提醒
参数:
-q、--query:查询标志是用于搜索应用的默认参数(无需指定)。
可选参数:
--id:将搜索限制为应用程序的 ID。该 ID 包含发布者和应用程序名称。--name:将搜索限制为应用程序的名称。-v、--version:指定要安装的确切版本。如果此项未指定,则使用latest会安装最高版本的应用程序。-s、--source:使用指定的源名称(msstore 等)查找包。-l、--location:指定需要安装到的位置(并非所有的软件都支持该参数),如果不指定,默认就安装到C:\Program Files\WindowsApps目录中。
- 示例:安装 powertoys(需要精确匹配)
cmd
winget install --id Microsoft.PowerToys1

- 示例:安装指定版本的 powertoys
cmd
winget install --id Microsoft.PowerToys --version 0.17.01

- 示例:安装到指定位置
cmd
winget install --id Apache.Groovy.4 -l D:\develop\groovy1

2.4.3 卸载软件
- 格式:
shell
winget uninstall [可选参数] [-q] <软件名>1
提醒
参数:
-q、--query:查询标志是用于搜索应用的默认参数(无需指定)。
可选参数:
--id:将搜索限制为应用程序的 ID。该 ID 包含发布者和应用程序名称。--name:将搜索限制为应用程序的名称。-s、--source:使用指定的源名称(msstore 等)查找包。
- 示例:卸载指定的软件
cmd
winget uninstall --id Apache.Groovy.41

2.4.4 查询已安装软件
- 格式:
shell
winget list [可选参数] [-q] <软件名>1
提醒
参数:
-q、--query:查询标志是用于搜索应用的默认参数(无需指定)。
可选参数:
--id:将搜索限制为应用程序的 ID。该 ID 包含发布者和应用程序名称。--name:将搜索限制为应用程序的名称。-n、--count:限制查询中显示的应用个数。-s、--source:使用指定的源名称(msstore 等)查找包。
- 示例:查询本地是否安装有 Git
cmd
winget list git1

- 示例:查询本地安装的所有应用
cmd
winget list1

- 示例:查询本地安装的所有应用,但是限制输出为 9 个
cmd
winget list -n 91

- 示例:查询本地安装有指定源的所有应用,但是限制输出为 9 个
cmd
winget list --source winget -n 91

2.4.5 查看软件详细信息
- 格式:
shell
winget show [可选参数] [-q] <软件名>1
提醒
参数:
-q、--query:查询标志是用于搜索应用的默认参数(无需指定)。
可选参数:
--id:将搜索限制为应用程序的 ID。该 ID 包含发布者和应用程序名称。
- 示例:卸载指定的软件
cmd
winget show --name Apache.Groovy.41

2.5 winget 镜像源
2.4.1 概述
- 之前提过,软件包管理器是需要远程仓库(镜像源,存储库)来托管软件包,如下所示:
- 但是,默认情况下,winget 有些软件包是托管到 GitHub 上的,在国内如果使用 winget 进行软件包的下载会很慢,所以就需要切换到国内的 winget 的镜像源(存储库),如下所示:
2.5.2 查看 winget 镜像源
- 格式:
shell
winget source list [-name 镜像源名称]1
提醒
默认情况下,winget 会配置两个镜像源,如下所示:
- ① msstore:Microsoft Store 目录。
- ② winget:Windows 程序包管理器应用镜像源。
可选参数:
-name:获取有关镜像源的完整详细信息。
- 示例:查询所有的镜像源
cmd
winget source list1

- 示例:查询指定镜像源的详细信息
cmd
winget source list --name winget1

2.5.3 添加 winget 镜像源
- 格式:
shell
winget source add <镜像源名称> <镜像源的 URL 地址> --trust-level trusted1
注意
由于该命令会更改用户访问权限,因此使用 add 需要管理员权限。
- 示例:
cmd
winget source add ustc https://mirrors.ustc.edu.cn/winget-source --trust-level trusted1

2.5.4 更新 winget 镜像源
- 格式:
shell
winget source update [--name <镜像源名称>]1
- 示例:更新所有镜像源
cmd
winget source update1

- 示例:更新指定镜像源
cmd
winget source update --name winget1

2.5.5 删除 winget 镜像源
- 格式:
shell
winget source remove --name <镜像源名称>1
注意
由于该命令会更改用户访问权限,因此使用 remove 需要管理员权限。
- 示例:
cmd
winget source remove --name winget1

2.5.6 重置 winget 镜像源
- 格式:
shell
winget source reset --force1
注意
- ① reset 子命令用于将客户端重置为其原始配置,并删除除默认源之外的所有源。
- ② 由于该命令会更改用户访问权限,因此使用 reset 需要管理员权限。
- 示例:
cmd
winget source reset --force1

2.6 更新维护
2.6.1 升级软件
- 格式:
shell
winget upgrade [可选参数] [-q] <软件名>1
提醒
参数:
-q、--query:查询标志是用于搜索应用的默认参数(无需指定)。
可选参数:
--id:将搜索限制为应用程序的 ID。该 ID 包含发布者和应用程序名称。--name:将搜索限制为应用程序的名称。-v、--version:指定要安装的确切版本。如果此项未指定,则使用latest会安装最高版本的应用程序。
- 示例:更新指定软件包
cmd
winget upgrade --id Apache.Groovy.41

- 示例:更新所有软件包
cmd
winget upgrade --all --force --unknown1

2.6.2 应用程序的批量导出和批量导入
- 格式:
shell
winget export [-o] xxx.json # 将应用程序的 JSON 文件导出到指定文件1
shell
winget import [-i] xxx.json # 导入要安装的应用的 JSON 文件1
提醒
应用场景:主要用于与其他开发人员共享该文件,或在还原开发、测试或生产环境。
- 示例:
cmd
winget export -o package.json1

第三章:Chocolatey(💾)
3.1 概述
- Chocolatey 是长期流行的第三方软件包管理器,支持许多开发工具、服务和常见软件,其还提供商业版支持。
点我查看为什么还介绍 Chocolatey?
因为有些软件还没有对 winget 进行适配,如:Maven 和 Gradle,如下所示:

3.2 安装
3.2.1 winget 安装 Chocolatey(推荐)
- 使用 winget 命令进行安装:
cmd
winget install --id Chocolatey.Chocolatey1

3.2.2 手动执行命令安装 Chocolatey
- 使用管理员的权限执行以下的命令:
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"1
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://community.chocolatey.org/install.ps1'))1

3.3 Chocolatey 远程仓库的使用
- 和 winget 不同的是,Chocolatey 提供了一个 可视化界面 来辅助我们使用,如下所示:

- 我们就可以在这个 可视化界面 中搜索想要的软件包,获取软件包安装的命令,如下所示:

3.4 基本操作(CRUD)
3.4.1 搜索软件
- 格式:
shell
choco search <软件名> [可选参数]1
提醒
可选参数:
-y, --yes, --confirm:确认所有提示。-s、--source:使用指定的源名称(windowsfeatures、ruby、cygwin、python 等)查找包。-a, --all, --allversions, --all-versions:显示程序包的可用版本。-e, --exact:精确搜索。
- 示例:查询指定的软件包
cmd
choco search nodejs1

- 示例:精确查找指定的软件包
cmd
choco search nodejs --exact1

- 示例:查询所有可用的软件包
cmd
choco search ""1

- 示例:分页搜索软件包
cmd
choco search jdk --page=0 --page-size=251

- 示例:显示软件包的所有可用版本(软件包需要精确匹配)
cmd
choco search 7zip --all-versions --exact1

3.4.2 安装软件
- 格式:
shell
choco search <软件名> [可选参数]1
提醒
可选参数:
-s、--source:使用指定的源名称(windowsfeatures、ruby、cygwin、python 等)查找包。-f、--force:强制安装,忽略已安装的相同版本。-d、--debug:启用调试模式。-v、--verbose:启用详细输出(verbose logging)。-y, --yes, --confirm:确认所有提示。--params="":传递给软件包的参数。--install-arguments="":安装参数,直接传递给程序。
- 示例:安装 git 软件包
cmd
choco install git1

- 示例:一次性安装多个软件包,并确认所有提示
cmd
choco install notepadplusplus googlechrome 7zip -y1

- 示例:强制重新安装软件,并强制重新安装其依赖项
cmd
choco install notepadplusplus --force --force-dependencies1

- 示例:安装多个软件包,启用详细输出并强制安装
cmd
choco install notepadplusplus googlechrome 7zip -dvfy1

- 示例:安装 Git,并传递参数给 Git
cmd
choco install git -y --params="'/GitAndUnixToolsOnPath'"1

- 示例:安装 Git,指定额外的安装参数
cmd
choco install git -y --params="'/GitAndUnixToolsOnPath'" --install-arguments="'/DIR=C:\git'"1

- 示例:安装指定版本的 Node.js
cmd
choco install nodejs --version 22.2.01

3.4.3 升级软件
- 格式:
shell
choco upgrade <软件名> [可选参数]1
提醒
可选参数:
-s、--source:使用指定的源名称(windowsfeatures、ruby、cygwin、python 等)查找包。-f、--force:强制安装,忽略已安装的相同版本。-d、--debug:启用调试模式。-v、--verbose:启用详细输出(verbose logging)。-y, --yes, --confirm:确认所有提示。--params="":传递给软件包的参数。--install-arguments="":安装参数,直接传递给程序。
准备工作:
cmd
choco install notepadplusplus --version 8.6.5 -fy --force-dependencies
choco install git --version 2.41.0 -fy --force-dependencies
choco install nodejs --version 22.2.0 -fy --force-dependencies1
2
3
2
3
- 示例:更新 chocolatey
cmd
choco upgrade chocolatey1

- 示例:批量更新多个软件包
cmd
choco upgrade notepadplusplus1

- 示例:批量更新多个软件包,启用详细输出并强制安装
cmd
choco upgrade notepadplusplus -dvfy1

- 示例:更新软件包,并传递参数
cmd
choco upgrade git -y --params="'/GitAndUnixToolsOnPath /NoAutoCrlf'"1

- 示例:更新软件包,并指定额外的安装参数
cmd
choco upgrade git -y --params="'/GitAndUnixToolsOnPath /NoAutoCrlf'" --install-args="'/DIR=C:\git'"1

- 示例:将软件包更新到指定的版本
cmd
choco upgrade nodejs.install --version 23.6.01

- 示例:排除某些软件之后,更新剩下的全部软件
cmd
choco upgrade all --except="'git,notepadplusplus'"1

- 示例:更新所有软件
cmd
choco upgrade all1

3.4.4 查询本地已安装的软件
- 格式:
shell
choco list <软件名> [可选参数]1
提醒
可选参数:
-i、--includeprograms、--include-programs:显示安装到计算机上的所有软件,包括哪些不是由 Chocolatey 管理的。
- 示例:显示通过 Chocolatey 安装到计算机上的软件
cmd
choco list1

- 示例:显示计算机上的所有软件,包括不是由 Chocolatey 管理的
cmd
choco list -i1

3.4.5 卸载软件
- 格式:
shell
choco uninstall <软件名> [可选参数]1
提醒
可选参数:
-f、--force:强制安装,忽略已安装的相同版本。-d、--debug:启用调试模式。-v、--verbose:启用详细输出(verbose logging)。-y, --yes, --confirm:确认所有提示。--version:卸载软件的指定版本。--all-versions:卸载软件的所有版本。
- 示例:卸载指定的软件
cmd
choco uninstall git1

- 示例:批量卸载软件
cmd
choco uninstall notepadplusplus googlechrome -dv1

- 示例:卸载软件的指定版本
cmd
choco uninstall nodejs --version 23.6.0 -fy1

- 示例:卸载软件的所有版本
cmd
choco uninstall nodejs --all-versions1

第四章:Scoop(🔥)
4.1 概述
- Scoop 是 Windows 平台上一个非常强大的
命令行包管理器(Package Manager)。简单来说,它就像是 Linux 里的apt/yum,或者 macOS 里的Homebrew。 - 我们可以用一行命令来安装、更新、卸载软件,而不需要去各种官网找下载链接、点“下一步”安装包。
4.2 Scoop 和 winget 的区别
4.2.1 为什么使用 Scoop?
- 普通的 Windows 软件安装经常让人头疼:权限弹窗、环境变量手动配置、各种流氓软件捆绑、卸载不干净。
- scoop 正式为了解决这些痛点而生的,特别是对
开发者极其友好:
| 优点 | 描述 |
|---|---|
1️⃣ 免管理员权限 | 默认将软件安装在你的用户目录( C:\Users\用户名\scoop )下,安装时不会弹出 UAC 账户控制提示。 |
2️⃣ 不污染系统环境 | 软件彼此隔离,所有的环境变量( PATH )都由 Scoop 自动配置和管理,不会弄乱注册表。 |
3️⃣ 真正的“绿色版”体验 | Scoop 倾向于下载解压即可用的便携版(Portable)软件。 卸载时直接删掉对应文件夹,不留任何垃圾。 |
4️⃣ 极简版本切换 | 可以同时安装 Java 8、Java 11 和 Java 17,用一行命令就能在它们之间无缝切换。 |
4.2.2 Scoop vs WinGet
- 两者都是 Windows 下的包管理器,但它们的
设计哲学和受众完全不同,如下所示:
| 特性 | Scoop | WinGet |
|---|---|---|
| 1️⃣ 官方背景 | 开源社区驱动 | 微软官方出品(Win11 自带) |
| 2️⃣ 核心定位 | 面向开发者 ,偏向命令行工具、开源软件和绿色版软件 | 面向普通大众 ,偏向传统 GUI 软件(QQ、微信、Office) |
| 3️⃣ 安装方式 | 解压/便携化(Portable),安装在用户目录 | 运行官方的 .exe 或 .msi 安装包 |
| 4️⃣ 管理员权限 | 默认不需要 | 大多数情况下需要(会弹出提示) |
| 5️⃣ 环境变量 | 自动配置,且管理得井井有条 | 依赖软件安装包自带的配置,有时需要手动调 |
建议
- ① 如果需要安装开发工具(Git、Python、Node.js、Neovim),用
Scoop体验堪称完美。 - ② 如果需要安装日常娱乐办公软件(微信、钉钉、Photoshop),用
WinGet更合适。
4.3 安装
4.3.1 标准安装(典型安装,推荐)
- 所谓的标准安装(非管理员安装)就是将 Scoop 安装到当前用户目录下,后续绝大多数软件都不需要弹窗打包管理员权限:
powershell
# 修改 powershell 脚本执行策略
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 执行安装(需要访问 GitHub)
irm get.scoop.sh | iex1
2
3
4
2
3
4
点我查看访问 GitHub 时遇到网络问题
- 解决方案就是使用
科学上网(VPN),如下所示:
powershell
iex "& {$(irm get.scoop.sh -Proxy 'http://<ip:port>')} -Proxy 'http://<ip:port>'"
# or
$env:HTTP_PROXY='http://<ip:port>'
$env:HTTPS_PROXY='http://<ip:port>'
irm get.scoop.sh | iex1
2
3
4
5
6
2
3
4
5
6
点我查看当前用户是管理员
- 修改 powershell 脚本执行策略,如下所示:
powershell
# 修改 powershell 脚本执行策略
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 执行安装(需要访问 GitHub)
iex "& {$(irm get.scoop.sh)} -RunAsAdmin"1
2
3
4
2
3
4
- 示例:
powershell
# 修改 powershell 脚本执行策略
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 执行安装(需要访问 GitHub)
irm get.scoop.sh | iex # 管理员执行 iex "& {$(irm get.scoop.sh)} -RunAsAdmin"1
2
3
4
2
3
4

4.3.2 高级安装(自定义安装)
- 所谓的高级安装就是可以指定参数再安装,如:安装到 D 盘等,如下所示:
powershell
# 设置普通应用安装到 D 盘,并写入用户环境变量
$env:SCOOP='D:\Scoop'
[Environment]::SetEnvironmentVariable('SCOOP', $env:SCOOP, 'User')
# 设置全局应用(--global)安装到 D 盘,并写入系统环境变量(需管理员权限)
$env:SCOOP_GLOBAL='D:\Scoop\Global'
[Environment]::SetEnvironmentVariable('SCOOP_GLOBAL', $env:SCOOP_GLOBAL, 'Machine')
# 注入南京大学镜像源(注入后,安装过程将直接走国内加速,不再卡死)
$env:SCOOP_REPO = 'https://mirror.nju.edu.cn/git/scoop.git'
# 修改 powershell 脚本执行策略
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 执行安装(需要访问 GitHub)
irm get.scoop.sh | iex1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
点我查看访问 GitHub 时遇到网络问题
- 解决方案 1 就是使用
科学上网(VPN),如下所示:
powershell
iex "& {$(irm get.scoop.sh -Proxy 'http://<ip:port>')} -Proxy 'http://<ip:port>'"
# or
$env:HTTP_PROXY='http://<ip:port>'
$env:HTTPS_PROXY='http://<ip:port>'
irm get.scoop.sh | iex1
2
3
4
5
6
2
3
4
5
6
- 解决方案 2 使用 GitHub 加速站,如下所示:
powershell
irm https://gh-proxy.org/https://raw.githubusercontent.com/scoopinstaller/install/master/install.ps1 | iex1
点我查看当前用户是管理员
- 修改 powershell 脚本执行策略,如下所示:
powershell
# 修改 powershell 脚本执行策略
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 执行安装(需要访问 GitHub)
iex "& {$(irm get.scoop.sh)} -RunAsAdmin"1
2
3
4
2
3
4
- 示例:
powershell
# 设置普通应用安装到 D 盘,并写入用户环境变量
$env:SCOOP='D:\Scoop'
[Environment]::SetEnvironmentVariable('SCOOP', $env:SCOOP, 'User')
# 设置全局应用(--global)安装到 D 盘,并写入系统环境变量(需管理员权限)
$env:SCOOP_GLOBAL='D:\Scoop\Global'
[Environment]::SetEnvironmentVariable('SCOOP_GLOBAL', $env:SCOOP_GLOBAL, 'Machine')
# 注入南京大学镜像源(注入后,安装过程将直接走国内加速,不再卡死)
$env:SCOOP_REPO = 'https://mirror.nju.edu.cn/git/scoop.git'
# 修改 powershell 脚本执行策略
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 执行安装(需要访问 GitHub)
irm get.scoop.sh | iex # 管理员执行 iex "& {$(irm get.scoop.sh)} -RunAsAdmin"1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12

4.4 软件库管理
4.4.1 概述
- Scoop 本身自带的软件库(
mainbucket)只收录没有图形界面的命令行工具。 - 换言之,如果我们想安装带有界面的软件,如:Chrome、VSCode 等,就需要添加扩展库(官方称为
extras)。
4.4.2 查看已添加的扩展库
- 格式:
powershell
scoop bucket list1
- 示例:
powershell
scoop bucket list1

4.4.3 添加扩展库(推荐)
- 格式:
shell
scoop bucket add extras
scoop bucket add versions1
2
2
- 示例:
powershell
scoop bucket add extras
scoop bucket add versions1
2
2

4.4.4 查看推荐的官方库或第三方库
- 格式:
shell
scoop bucket known1
- 示例:
powershell
scoop bucket known1

4.4.5 删除扩展库
- 格式:
powershell
scoop bucket rm <扩展库名称>1
- 示例:
powershell
scoop bucket rm php1

4.5 软件管理(CRUD)
4.5.1 搜索软件
- 格式:
powershell
scoop search <软件名>1
- 示例:
powershell
scoop search vim1

4.5.2 安装软件
- 格式:
powershell
scoop install <软件名>1
- 示例:
powershell
scoop install vim1

4.5.3 卸载软件
- 格式:
powershell
scoop uninstall <软件名>1
- 示例:
powershell
scoop uninstall vim1

4.5.4 查看已安装软件
- 格式:
powershell
scoop list1
- 示例:
powershell
scoop list1

4.5.5 查看软件详细信息
- 格式:
powershell
scoop info <软件名>1
- 示例:
powershell
scoop info vim1

4.6 更新维护
4.6.1 更新 Scoop 自身及软件源列表
- 格式:
powershell
scoop update1
- 示例:
powershell
scoop update1

4.6.1 查看哪些软件有新版本
- 格式:
powershell
scoop status1
- 示例:
powershell
scoop status1

4.6.2 更新指定的软件
- 格式:
powershell
scoop update <软件名>1
- 示例:
powershell
scoop update curl1

4.6.3 更新所有软件
- 格式:
powershell
scoop update *1
- 示例:
powershell
scoop update *1

4.6.4 清除旧版本的软件缓存
- 格式:
powershell
scoop cleanup *1
- 示例:
powershell
scoop cleanup *1

第五章:包管理器图形化解决方案 --- UniGetUI
5.1 概述
- UniGetUI 主要目标是为 Windows 10 和 Windows 11 的最常见 CLI 包管理器创建直观的 GUI,例如: WinGet 、 Scoop 、 Chocolatey 、 Pip 、 Npm 、 .NET Tool 、 PowerShell Gallery 等。
- 使用此应用程序,可以轻松下载、安装、更新和卸载在受支持的包管理器上发布的任何软件。
5.2 安装
- 可以通过 winget 等软件包管理器安装:
cmd
winget install --exact --id Devolutions.UniGetUI --source winget1

5.3 使用
- 使用方式很简单,就是在图形化界面上操作,如下所示:

第六章:Oh My Posh(🎯)
6.1 概述
- Oh My Posh 的主旨是:
适用于任何 shell 的最可定制和最快的提示引擎。

6.2 Windows 安装和配置
6.2.1 安装和更新 Oh My Posh
- ① 安装 Oh My Posh:
cmd
winget install JanDeDobbeleer.OhMyPosh --source winget1

- ② 更新 Oh My Posh(可选):
cmd
winget upgrade JanDeDobbeleer.OhMyPosh --source winget1

6.2.2 安装字体
- ① 升级 PowerShell:
cmd
:: 安装/更新到最新版 PowerShell 7
Install-Module PSReadLine -Force -AllowClobber -Scope AllUsers
winget install --id Microsoft.PowerShell --source winget
:: 启用自动更新
winget upgrade Microsoft.PowerShell --silent
:: 查看 Windows PowerShell 5.1 版本
Install-Module PSReadLine -Force -AllowClobber -Scope AllUsers
powershell -command "$PSVersionTable.PSVersion"
:: 查看 PowerShell 7.x 版本
pwsh -command "$PSVersionTable.PSVersion"1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13

- ② 安装字体:
提醒
- ① 字体需要安装在主机系统上,因为这是 UI 设置,不是命令行或 shell 配置。
- ② 这意味着在
容器或WSL中运行时,我们需要在主机系统上安装字体,并配置终端模拟器使用它。
cmd
oh-my-posh font install meslo1

powershell
# 安装 NerdFonts 模块以便安装 Nerd 字体
Install-PSResource -Name NerdFonts
Import-Module -Name NerdFonts
# 当前用户
Install-NerdFont -Name FiraCode
# 所有用户,需要管理员权限
Install-NerdFont -Name FiraCode -Scope AllUsers1
2
3
4
5
6
7
8
2
3
4
5
6
7
8

6.2.3 给终端或编辑器配置字体
- ① 对于 Windows 终端,我们需要配置刚安装的字体:
提醒
- ① 可以通过修改 Windows 终端设置来完成配置字体,默认的快捷键是
CTRL + SHIFT + ,,也可以通过图形化的方式来配置。 - ② 在自己的
settings.json文件中,在profiles中defaults属性下的font.face属性进行配置。
json
{
"profiles":
{
"defaults":
{
"font":
{
"face": "MesloLGM Nerd Font"
}
}
}
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13

- ② 对于 Visual Studio Code,我们需要配置刚安装的字体(其他编辑器类似):
提醒
- ① 我们可以在
用户 --> 功能 --> 终端中配置刚安装的字体。 - ② 也可以修改配置文件来配置刚安装的字体(默认快捷键是
CTRL + + ,),只需要更新terminal.integrated.fontFamily对应的值。
json
"terminal.integrated.fontFamily": "MesloLGM Nerd Font"1

6.2.4 配置 Shell 去使用 Oh My Posh
- 对于 cmd 来说,可以使用 clink 来实现自定义提示(间接使用 Oh My Posh):
提醒
clink 默认内置支持 Oh My Posh。
cmd
# 安装 clink
winget install clink
# 开启静态提示符
clink set prompt.transient same_dir
# 去掉启动 banner
clink autorun install -- --quiet
# 启用 Oh My Posh
clink config prompt use oh-my-posh1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
cmd
# 安装 clink
scoop install clink
# 开启静态提示符
clink set prompt.transient same_dir
# 去掉启动 banner
clink autorun install -- --quiet
# 启用 Oh My Posh
clink config prompt use oh-my-posh1
2
3
4
5
6
7
8
2
3
4
5
6
7
8

- 对于 powershell 来说,只需要编辑
$PROFILE变量对应的文件即可:
powershell
# 创建对应的文件
if (!(Test-Path -Path $PROFILE)) {
New-Item -Path $PROFILE -Type File
}
# 如果上述命令执行失败,执行如下命令
set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
# 在 PowerShell 配置文件脚本中添加以下摘要作为最后一行
"oh-my-posh init pwsh | Invoke-Expression" | Add-Content $PROFILE
# 查看是否修改成功
notepad $PROFILE
# 添加后,重新加载你的个人资料,以便更改生效
. $PROFILE1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12

6.3 Linux 安装和配置
6.3.1 安装和更新 Oh My Posh
- ① 需要安装
curl、unzip、realpath、dirname等必要工具:
bash
# 更新软件包索引(可选)
sudo dnf makecache
# 安装 curl 和 unzip
sudo dnf install -y curl unzip
# 验证安装
curl --version
unzip -v
which realpath
which dirname1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9

bash
# 更新软件包索引
sudo apt update
# 安装 curl 和 unzip
sudo apt install -y curl unzip
# 验证安装
curl --version
unzip -v
which realpath
which dirname1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9

- ② 安装和更新 Oh My Posh:
bash
curl -s https://ohmyposh.dev/install.sh | bash -s -- -d /usr/local/bin
sudo chmod +x /usr/local/bin/oh-my-posh1
2
2

bash
curl -s https://ohmyposh.dev/install.sh | bash -s -- -d /usr/local/bin
sudo chmod +x /usr/local/bin/oh-my-posh1
2
2

6.2.2 安装字体(非必须)
- 安装字体:
提醒
- ① 字体需要安装在主机系统上,因为这是 UI 设置,不是命令行或 shell 配置。
- ② 这意味着在
容器或WSL中运行时,我们需要在主机系统上安装字体,并配置终端模拟器使用它。
bash
oh-my-posh font install meslo1

bash
oh-my-posh font install meslo1

6.2.3 给终端或编辑器配置字体
- ① 对于 Windows 终端,我们需要配置刚安装的字体:
提醒
- ① 可以通过修改 Windows 终端设置来完成配置字体,默认的快捷键是
CTRL + SHIFT + ,,也可以通过图形化的方式来配置。 - ② 在自己的
settings.json文件中,在profiles中defaults属性下的font.face属性进行配置。
json
{
"profiles":
{
"defaults":
{
"font":
{
"face": "MesloLGM Nerd Font"
}
}
}
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13

- ② 对于 Visual Studio Code,我们需要配置刚安装的字体(其他编辑器类似):
提醒
- ① 我们可以在
用户 --> 功能 --> 终端中配置刚安装的字体。 - ② 也可以修改配置文件来配置刚安装的字体(默认快捷键是
CTRL + + ,),只需要更新terminal.integrated.fontFamily对应的值。
json
"terminal.integrated.fontFamily": "MesloLGM Nerd Font"1

6.2.4 配置 Shell 去使用 Oh My Posh
- 对于 bash 来说,只需要激活 Oh My Posh 即可:
bash
# 激活 Oh My Posh
grep -q 'oh-my-posh init' ~/.bashrc || echo 'eval "$(oh-my-posh init bash)"' >> ~/.bashrc
# 重新加载
exec bash1
2
3
4
2
3
4

- 对于 fish 来说,只需要激活 Oh My Posh 即可:
bash
# 激活 Oh My Posh
grep -q 'oh-my-posh init' ~/.config/fish/config.fish || echo 'oh-my-posh init fish | source' >> ~/.config/fish/config.fish
# 重新加载
exec fish1
2
3
4
2
3
4

6.4 下一代 ls 命令
6.4.1 Windows 安装和配置
- 对于 Windows 需要安装 lsd,如下所示:
cmd
winget install --id lsd-rs.lsd1

cmd
scoop install lsd1

- 对于 cmd(clink)需要查看插件目录:
cmd
clink info1

- 为了让 cmd 启动的时候自动运行 lsd,在 clink 插件目录中,创建
clink_startup.lua脚本,内容如下:
lua
os.execute('doskey ll=lsd -l $*')
os.execute('doskey la=lsd -a $*')
os.execute('doskey lla=lsd -la $*')
os.execute('doskey lt=lsd --tree $*')
os.execute('doskey pwd=cd')
os.execute('doskey clear=cls')1
2
3
4
5
6
2
3
4
5
6

- 对于 powershell,只需要通过修改配置文件即可:
powershell
notepad $PROFILE
# 只有当 lsd 命令存在时才设置别名,防止报错
if (Get-Command lsd -ErrorAction SilentlyContinue) {
function ll { lsd -l $args }
function la { lsd -a $args}
function lla { lsd -la $args}
function lt { lsd --tree $args}
}
# 加载配置文件
. $PROFILE1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12

6.4.2 Linux 安装和配置
- Linux 直接通过
cargo或包管理器进行安装:
bash
dnf install -y rust cargo
cargo install lsd
ln -s $HOME/.cargo/bin/lsd /usr/local/bin/lsd1
2
3
2
3

bash
apt -y install lsd1

- 在 Shell 中配置命令别名:
bash
# 写入到配置文件中
cat >> ~/.bashrc << 'EOF'
if command -v lsd &> /dev/null; then
alias ll='lsd -l'
alias la='lsd -a'
alias lla='lsd -la'
alias lt='lsd --tree'
fi
EOF
# 加载配置文件
source ~/.bashrc1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11

fish
alias -s ll 'lsd -l'
alias -s la 'lsd -a'
alias -s lla 'lsd -la'
alias -s lt 'lsd --tree'1
2
3
4
2
3
4
