Sundry 是一个 WinGet 相关的工具,帮您更方便地移除清单、修改清单、分析验证错误等。
- 前往 GitHub Release 页面下载安装程序或 zip/7z 归档。
- 使用 WinGet 获取:
winget install --id DuckStudio.Sundry --source winget --exact从源构建。
当您获取本工具后,请先使用这个命令初始化配置文件:
sundry config init题外话: 这个配置文件就是我将其从我自己的工具变为这里的工具的方法 XD
Tip
在 1.1.0 之前,配置文件在程序目录下的 config.json 中;在 1.1.0 之后,配置文件在用户目录下的 .config/DuckStudio/Sundry/config.json 中。 - 这是为更新时不覆盖配置文件考虑的,如果配置文件不对,请再次使用 sundry config init。
由于作者实在是太懒了,在卸载 Sundry 之后不会移除配置文件,如果需要可以手动移除。
参见 Sundry 配置文件文档 了解有关配置文件的更多说明。
初始化完配置文件后用以下命令确认下:
sundry config show如果有任何地方不对,请使用这个命令修改对应键的值:
sundry config "<条目>" "<值>"更多可用命令请见下方示例。
sundry remove
截图来自拉取请求: microsoft/winget-pkgs#265074
- 别名: 移除,remove
- 作用: 移除一个指定的软件包的指定版本,并在移除前自动检查该版本是否确实存在问题。可以指定理由或跳过自动检查。默认理由为“安装程序URL在GitHub Action上返回了404”。
- 用法: sundry remove <软件包标识符> <软件包版本> [是否跳过自动检查] [理由]
- 示例:
- 最少参数: sundry remove DuckStudio.FufuTools 1.3.10
- 跳过自动检查: sundry remove DuckStudio.FufuTools 1.3.10 True
- 指定理由: sundry remove DuckStudio.FufuTools 1.3.10 "该版本存在一个已知问题"
- 指定理由的同时跳过自动检查: sundry remove DuckStudio.FufuTools 1.3.10 True "该版本存在一个已知问题"
 
- 最少参数: 
sundry autoremove
- 别名: 自动移除,autoremove
- 作用: 自动检查并移除指定软件包标识符下的失效版本。
- 用法: sundry autoremove <软件包标识符> [是否跳过检查]
- 示例:
- 基本: sundry autoremove DuckStudio.Sundry
- 跳过检查 (直接移除整个包): sundry autoremove DuckStudio.Sundry skip
 
- 基本: 
sundry modify
- 别名: 单改,单修改,modify
- 作用: 修改一个指定的软件包的指定版本的清单,并在修改完后自动提交拉取请求。
- 用法: sundry modify <软件包标识符> <版本> [理由/解决的议题]
- 示例:
- 最少参数: sundry modify XBMCFoundation.Kodi 18.2.0.0(microsoft/winget-pkgs#267613)
- 指定理由: sundry modify XBMCFoundation.Kodi 18.3.0.0 "替换 HTTP 为 HTTPS"(microsoft/winget-pkgs#267614)
- 链接议题:
- 使用议题 URL: sundry modify DuckStudio.Sundry 1.2.6 "https://github.com/microsoft/winget-pkgs/issues/267539"
- 使用议题纯数字编号: sundry modify DuckStudio.Sundry 1.2.6 "267539"
- 使用议题编号: sundry modify DuckStudio.Sundry 1.2.6 "#267539"
 
- 使用议题 URL: 
- 指定理由的同时链接议题:
sundry modify DuckStudio.Sundry 1.2.6 "一些修改。 - Resolves https://github.com/microsoft/winget-pkgs/issues/267539" GitHub Docs: 使用关键词将拉取请求链接到议题 
 
- 最少参数: 
sundry logs-analyse
- 别名: 日志分析,logs-analyse,logs_analyse,Azure日志分析
- 作用: 分析 Azure Validation Pipeline Run 失败时的日志,来自动查找具体哪里失败了。
- 用法:
- 分析日志: sundry logs-analyse <Azure Pipline Url> [是否保留日志文件] [是否显示一般错误/异常]
- 清理之前下载的日志: sundry logs-analyse cleanup
 
- 分析日志: 
- 示例:
- 分析日志
这里的 Azure Validation Pipeline Run 是 microsoft/winget-pkgs#295511 (comment) 的。 - 最少参数: sundry logs-analyse "https://dev.azure.com/shine-oss/8b78618a-7973-49d8-9174-4360829d979b/_build/results?buildId=183216"(需要用户输入)
- 不保留日志文件: sundry logs-analyse "https://dev.azure.com/shine-oss/8b78618a-7973-49d8-9174-4360829d979b/_build/results?buildId=183216" n
- 保留日志文件: sundry logs-analyse "https://dev.azure.com/shine-oss/8b78618a-7973-49d8-9174-4360829d979b/_build/results?buildId=183216" y(运行后将打开日志文件所在目录)
- 不显示一般错误/异常: 默认,不需要传递额外参数。
- 显示一般错误/异常: sundry logs-analyse "https://dev.azure.com/shine-oss/8b78618a-7973-49d8-9174-4360829d979b/_build/results?buildId=183216" 占位 y
- 保留日志文件且不显示一般错误/异常: 默认不显示一般错误/异常,同保留日志文件的示例。
- 保留日志文件且显示一般错误/异常: sundry logs-analyse "https://dev.azure.com/shine-oss/8b78618a-7973-49d8-9174-4360829d979b/_build/results?buildId=183216" y y
 
- 最少参数: 
- 清理之前下载的日志: sundry logs-analyse cleanup(等效于sundry cleanup logs-analyse)
 
- 分析日志
下载日志文件时响应 404 意味着什么?
- 验证管道没有上传日志。
- 此次运行的日志已被删除。
 如果这是一个较早的运行,日志可能已经被项目配置自动清理掉了。
sundry verify
截图是在 Hyper-V Windows 10 x64 虚拟机上的测试。
- 别名: verify,test,验证,测试
- 作用: 用于测试本地或 PR 上的清单的安装和卸载,并获取 ARP 条目变更。
- 用法:
- 本地仓库清单: sundry verify <软件包标识符> <软件包版本>
- 指定清单文件夹: sundry verify <清单文件夹路径>
- PR 清单: sundry verify <PR链接>
 
- 本地仓库清单: 
- 示例:
- 测试本地仓库清单: sundry verify DuckStudio.FufuTools 1.3.10
- 测试指定清单文件夹: sundry verify D:/WinGet/Manifests/DuckStudio/FufuTools/1.3.10/
- 测试 PR 清单: sundry verify <打开的PR>
 
- 测试本地仓库清单: 
- 它只能获取 HEAD 分支没被删除的 PR 的清单,如果 HEAD 分支被删除了 GitHub API 会响应 404 Not Found。
- 它暂时无法获取
UpgradeCode。
sundry ignore
- 别名: 忽略,检查忽略,ignore
- 作用: 管理 winget-tools 中的检测脚本的忽略字段。
- 用法: sundry ignore <add/remove/edit/list> [忽略字段] [理由]
- 示例:
- 添加忽略字段: sundry ignore add "https://www.argyllcms.com/" "服务器冲不动咖啡 (418)"
- 移除忽略字段: sundry ignore remove "https://www.argyllcms.com/" "又冲得动了"
- 编辑忽略字段: sundry ignore edit
- 列出所有忽略字段: sundry ignore list
 
- 添加忽略字段: 
sundry cat
- 别名: 没有别名,只能用 cat。
- 作用: 获取指定软件包标识符的指定版本的清单,可以指定获取所有清单或某个类型的清单。
- 用法: sundry cat <软件包标识符> <版本> [清单类型] [区域设置(如果是locale类型)]
- 示例:
- 获取所有清单: sundry cat DuckStudio.Sundry 1.2.3- 亦可使用 sundry cat DuckStudio.Sundry 1.2.3 all
- 除 all外还可用全部,所有
 
- 亦可使用 
- 获取指定类型的清单:
- 安装程序清单: sundry cat DuckStudio.Sundry 1.2.3 i- 可以用 installer,安装程序,安装,i
 
- 可以用 
- 区域清单: sundry cat DuckStudio.Sundry 1.2.3 l zh-CN- 可以用 locale,区域,区域设置,l
- 必须指定具体哪个区域设置的清单
 
- 可以用 
- 版本清单: sundry cat DuckStudio.Sundry 1.2.3 v- 可以用 version,ver,v,版本
 
- 可以用 
 
- 安装程序清单: 
 
- 获取所有清单: 
sundry prune
- 别名: 没有别名,只能用 prune。
- 作用: 清理仓库远程已删除的分支。
- 等效于:
cd $winget_pkgs git remote prune origin cd $winget_tools git remote prune origin 
 
- 等效于:
- 用法: sundry prune
- 示例: sundry prune
sundry sync
- 别名: sync,同步,synchronize,sync-fork
- 作用: 同步 fork 仓库和上游仓库的修改。
- 用法: sundry sync
- 示例: sundry sync
sundry repr
- 别名: 没有别名,只能用 repr。
- 作用: 等效于 Python 的 repr(),用于获取字符串真实的样子。
- 用法: sundry repr <文件路径/文本内容> [编码(默认 UTF-8)]
- 示例:
- 文本:
sundry repr "第一行 第二行" 
- 文件: sundry repr "D:/文件路径/文件.txt"
- 指定编码: sundry repr "D:/文件路径/文件.txt" "gbk"
 
- 文本:
sundry config
- 别名: config,配置
- 作用: 初始化和修改 Sundry 配置。
- 用法: sundry config <参数...>
- 示例:
- 初始化配置: sundry config init
- 显示当前配置: sundry config show
- 修改配置项: sundry config git.signature false
 
- 初始化配置: 
有关配置文件的更多信息,请参阅配置文件 1.1 文档。
sundry revert
- 别名: 还原,revert
- 作用: 还原本地仓库的修改,如果 Sundry 在修改的某个过程中崩溃了,则可以使用此命令还原 Sundry 做的修改。
- 用法: sundry revert <仓库> <是否已提交> <是否丢弃>
- 示例:
- 还原所有仓库、未提交、丢弃: sundry revert all n y
- 还原 winget-pkgs 仓库、已提交、丢弃: sundry revert pkgs y y
- 还原 winget-tools 仓库、未提交、保留: sundry revert tools n n
 
- 还原所有仓库、未提交、丢弃: 
sundry fun
- 别名: 没有别名,只能用 fun。
- 作用: 管理 Sundry 的 fun.txt。
- 用法: sundry fun <random/list/edit/add/remove/import> [参数...]
- 示例:
- 随机一个: sundry fun或sundry fun random- 还可以使用 sundry fun 随机
 
- 还可以使用 
- 列出所有: sundry fun list- 可以用 获取,读取,get,list
 
- 可以用 
- 编辑 fun.txt: sundry fun edit- 可以用 编辑,edit,打开,open
 
- 可以用 
- 添加新的: sundry fun add "提问: 罗浮六御中谁最幸福? 答案: 符玄。因为她姓符。"- 可以用 add,添加
 
- 可以用 
- 移除原来的: sundry fun remove "Ciallo~(∠・ω< )⌒☆"- 可以用 remove,移除
 
- 可以用 
- 从其他文件导入(覆盖): sundry import "D:/文件路径/另一个fun.txt"- 可以用 import,导入
 
- 可以用 
 
- 随机一个: 
sundry cleanup
- 别名: 清理,cleanup
- 作用: 清理 Sundry 的各个工具运行时产生的文件。
- 用法: sundry cleanup <工具名>- 可以被清理的工具有 logs-analyse,autoremove,remove,verify; 您还可以使用all来清理所有工具产生的文件。
 
- 可以被清理的工具有 
- 示例:
- 清理所有: sundry cleanup(等效于sundry cleanup all)
- 清理指定工具: sundry cleanup logs-analyse(等效于sundry logs-analyse cleanup)
 
- 清理所有: 
| 命令 | 是否支持 | 备注 | 
|---|---|---|
| help | ✓ | |
| ver | ✓ | |
| remove | ✕ | 验证阶段需要 WinGet,不确定如何读取 Token | 
| autoremove | ✕ | 验证阶段需要 WinGet,移除版本依赖 remove 命令 | 
| modify | ✕ | 验证清单需要 WinGet,不确定如何读取 Token | 
| logs-analyse | 部分支持 | 不支持自动打开日志文件夹 | 
| verify | ✕ | 您只能在 Windows 上验证软件包 | 
| ignore | ✕ | 不确定如何读取 Token | 
| cat | ✓ | |
| sync | ✓ | |
| prune | ✓ | |
| repr | ✓ | |
| config | ✓ | |
| revert | ✓ | |
| fun | ✓ | |
| cleanup | ✓ | 
Tip
仓库下有一个适用于 Windows 的构建流,你可以 fork 后直接运行,它会将结果上传为工件。
- 克隆后 cd到项目所在目录
- 更新代码中的版本号
python "自动化脚本/修改版本号.py" "2025.520.1314"- 安装依赖
python -m venv .venv
& ".venv\Scripts\Activate.ps1"
python.exe -m pip install --upgrade pip
pip install -r "requirements.txt"- 转换图标格式 (可选)
python "自动化脚本/png-2-ico.py"- 构建
pyinstaller --onefile --distpath="Release" --name="sundry.exe" "src/sundry.py" --icon "icon/Sundry.ico"
# 如果前面没转换图标格式,参数中的图标请用 icon/Sundry.png,Pyinstaller 会尝试自己转换格式。- 复制所需文件
Copy-Item -Path "src/fun.txt" -Destination "Release" -Verbose
Copy-Item -Path "LICENSE" -Destination "Release" -Verbose- Release下就是构建结果
set -e
echo "克隆源码..."
git clone https://github.com/DuckDuckStudio/Sundry.git
cd Sundry
echo "创建虚拟环境并安装依赖..."
python3 -m venv .venv
source .venv/bin/activate
pip install -r "requirements.txt"
echo "构建二进制文件..."
python3 "自动化脚本/修改版本号.py" "2025.520.1314"
pyinstaller --onefile --distpath="Release" --name="sundry" "src/sundry.py"
deactivate
cp -v "src/fun.txt" "Release"
cp -v "LICENSE" "Release"
echo "整理文件..."
cd ..
cp -rv "Sundry/Release" "./Release"
rm -rvf Sundry
cd Release
echo "配置 Sundry..."
./sundry ver
./sundry config init然后 ./Release 下就是构建结果。















