关于 windows-ops
windows-ops 是用于诊断和处理 Windows 启动、磁盘、崩溃及资源问题的运维技能,适合需要依据系统日志定位故障的用户。它按诊断层级检查事件日志、注册表和硬件信号,并提供可逆的启动项管理与数据恢复脚本。
主要功能
- 01按诊断层级审查系统日志
- 02检查磁盘健康与存储事件
- 03分析崩溃记录和崩溃前时间线
- 04盘点并可逆禁用启动项
- 05采样进程 CPU 与提交量
- 06提供磁盘复制和映像恢复脚本
适用场景
- 01调查启动变慢或启动项过多
- 02定位磁盘故障、系统冻结与蓝屏
- 03诊断进程占用与提交压力
- 04从故障磁盘复制文件或制作映像
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ 0xdarkmatter/ claude-mods --skill windows-ops安装后在 Claude Code 中输入/windows-ops确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/bugcheck-codes.mdmanual-queries.mdprocess-triage.mdrecovery-patterns.mdreference-index.mdremote-diagnostics.mdstartup-mechanisms.mdstorage-events.mdsymptom-guide.mduac-attribution.mdworked-example.mdwsl.mdscripts/boot-perf.ps1copy-tree.ps1crash-triage.ps1disk-health.ps1drive-dependencies.ps1extract-image.ps1health-audit.ps1process-triage.ps1rescue-image.ps1safe-disable-startup.ps1scripts/_lib/common.ps1tests/run.sh详细介绍
windows-ops
可处理的问题
启动缓慢或越来越慢、硬盘悄无声息地发生故障、没有明显原因的崩溃、无法在没有管理员权限的情况下禁用的 HKLM 启动项、没有生成转储文件的蓝屏、原因不明的 UAC 提示、“拔掉这个硬盘安全吗?”,克隆故障硬盘、无法启动时的恢复、远程诊断,以及发热或提交量超限却无法从启动时解释原因的计算机。各种信号所在位置:references/symptom-guide.md。
核心要点
只要以正确方式查询正确的日志,Windows 就会告诉你问题所在。 大多数用户(以及大多数教程)都会去看任务管理器。真正的诊断信号存在于事件日志、注册表的 StartupApproved 键、存储驱动程序的重置事件,以及内核的错误检查记录中。本技能封装了可将噪声转化为结论的查询。
最常见的诊断失败:孤立地看待各种症状。“启动缓慢” → 禁用启动应用。“蓝屏” → 重新安装驱动程序。“随机崩溃” → 运行内存测试。这些都是合理的最后手段,但用于找出实际原因的数据就静静地躺在系统日志中,没人查看。务必先审计,再处理。
诊断阶梯
按顺序逐层排查。每一层都有一个二元结果:
0. Is it even local? — a "drive" that is a network mapping belongs to net-ops
1. Hardware errors — WHEA-Logger events (CPU/RAM/PCIe-level faults)
2. Storage health — disk events 7/52/153/154, storahci 129 (controller reset)
3. Crash record — Event 41 (Kernel-Power) + BugCheck code + dump files
4. Pre-crash timeline — events in N minutes before each crash
5. Boot inventory — all 5 startup mechanisms (registry, services, tasks, folders, group policy)
6. Resource pressure — CPU RATE sample, commit hoarders, orphans, stale hosts
7. Verdict — what's failing, what to do
最值得关注的故障集中在第 2 层(存储)和第 5 层(启动项过多)。第 6 层最常被处理,也最容易被误读:任务管理器在这一层的快照确实价值不高,因此常被一笔带过——但在同一层采集 CPU 速率,就能发现快照和孤儿检查都无法识别的挂起进程。
工作流
0. 首先确认盘符的类型
用户说“Z: 盘坏了”时,无法确定这是物理硬盘故障(本技能处理)还是 SMB/名称解析故障(net-ops)——无论哪种情况,盘符看起来都一样。运行其他操作前,先确认:
Get-SmbMapping # network mappings + Status (Connected / Disconnected / Unavailable)
Get-PSDrive -PSProvider FileSystem | Where-Object DisplayRoot # non-empty DisplayRoot = UNC-backed
如果结果中出现该盘符,它就是网络映射——请在此处停止,并移交给 net-ops(scripts/windows/smb-audit.ps1)。 不要运行物理硬盘排查流程:disk-health.ps1 和 drive-dependencies.ps1 只能检测本地硬盘,因此会对确实存在故障的硬盘报告一切正常,这比不报告任何内容更糟。
以下内容均假设硬盘已在本地物理连接。
1. 运行全面审计
scripts/health-audit.ps1
会生成结论块:硬件错误、各硬盘的存储健康状况、近期崩溃、资源消耗最多的进程、启动项清单。查找 [FAIL] 标记——这些就是需要深入排查的地方。
2. 深入排查故障层
| 症状 | 脚本 |
|---|---|
| 标记了存储错误 | scripts/disk-health.ps1 -DiskNumber N(或 -DriveLetter X 或 -Model 'HGST')——针对单个硬盘的深入检查:SMART、所有事件 ID、可归因于该硬盘的控制器重置,以及结论 |
| 近期发生崩溃 | scripts/crash-triage.ps1 -CrashTime <datetime>(或省略以查看最近一次崩溃)——崩溃前时间线 + BugCheck 解码,并检测关键线索 |
| “断开 X 盘安全吗?” | scripts/drive-dependencies.ps1 -DriveLetter X——查找指向该盘的页面文件、搜索索引、计划任务、服务、符号链接、启动快捷方式和运行键引用 |
| “为什么启动这么慢?” | scripts/boot-perf.ps1——从 Diagnostics-Performance 日志(管理员)或内核事件备用数据(非管理员)获取每次启动的耗时,并标记耗时较长的组件 |
3. 应用最小可逆修复
| 操作 | 脚本 |
|---|---|
| 禁用启动应用 — Run 键(HKCU + HKLM + WOW64) | scripts/safe-disable-startup.ps1 -Name <pattern>(无需管理员权限;支持通配符) |
| 禁用启动文件夹快捷方式 | scripts/safe-disable-startup.ps1 -Name '*.lnk'(通过同一脚本的 StartupFolder 变体处理) |
| 列出所有启动项的当前状态 | scripts/safe-disable-startup.ps1 -List |
| 重新启用之前禁用的项目 | scripts/safe-disable-startup.ps1 -Name <pattern> -Enable |
| 将服务设为 Manual(需管理员权限) | Set-Service <name> -StartupType Manual; Stop-Service <name> |
| 禁用计划任务 | Disable-ScheduledTask -TaskName <name> |
| 复制文件夹树,遇到错误时不会停止 | scripts/copy-tree.ps1 <src> <dst> — 仅添加文件,每个文件重试一次,并生成易读的失败文件日志;退出代码 10 = 有部分文件复制失败 |
| 从出现故障的驱动器安全克隆 | scripts/copy-tree.ps1 <src> <dst> -Mode Rescue — 使用带有 /R:0 /W:0 /MT:1 参数的 robocopy,避免重试持续冲击坏扇区 |
| 镜像文件夹(会删除目标位置中的额外文件) | scripts/copy-tree.ps1 <src> <dst> -Mode Mirror — 除非指定 -Force,否则会提示确认 |
| 驱动器损坏严重,无法进行文件级复制 | scripts/rescue-image.ps1 -ListDevices,然后运行 -Device <dev> -Image <path> — 使用 ddrescue,在监督下运行,并通过 mapfile 恢复任务 |
| 从救援映像中取回文件 | scripts/extract-image.ps1 -Image <img> -Plan,然后运行 -Extract -Dest <dir> -Include <pat> — 使用 7-Zip,只读,无需挂载 |
所有禁用操作都可逆 — StartupApproved 注册表机制只会翻转一个字节;重新启用操作则与之相反。
存储健康状况与故障检测
这是收益最高的单项审计。驱动器故障会导致启动缓慢(Windows 探测驱动器时发生超时)、系统不稳定(控制器重置会连锁导致内核挂起)和崩溃(I/O 故障会使关键进程终止)。需要交叉核对三个独立数据源:
磁盘事件 7(坏块)和 154(硬件错误)属于高严重性 ID:一个月内即使只有 10 次,也是强烈的故障信号;出现数百次则意味着应立即更换。storahci 事件 129(控制器重置):健康状态下应为零,一个月超过 5 次则表示正在发生故障。\Device\HarddiskN 中的 N 对应 Get-Disk 的磁盘编号。scripts/disk-health.ps1 会运行这三项检查;手动查询、事件目录和 SMART 备用方案见:references/manual-queries.md。
启动性能与启动项管理
Windows 有 五种独立的启动机制,每种都需要使用不同的工具。任务管理器只会显示其中两种。完整清单见 references/startup-mechanisms.md。
| 机制 | 位置 | 检查方式 | 禁用方式 |
|---|---|---|---|
| 注册表 Run 键 | HKCU/HKLM\...\Run(+ WOW6432) | Get-ItemProperty | StartupApproved 二进制标志 |
| 服务 | Service Control Manager | Get-Service | Set-Service -StartupType Manual(需管理员权限) |
| 登录时运行的计划任务 | Task Scheduler | Get-ScheduledTask | Disable-ScheduledTask |
| 启动文件夹快捷方式 | %APPDATA%\...\Startup\ + AllUsers | Get-ChildItem | 删除或重命名 .lnk |
| Group Policy 启动脚本 | HKLM\...\Policies\Scripts | Group Policy Editor / gpresult | (工作站上很少见) |
任务管理器中的“禁用”会在 HKCU 下写入一个 12 字节的 StartupApproved 标志(0x02 表示已启用,0x03 表示已禁用),因此非管理员用户也可以为自己禁用 HKLM 项;scripts/safe-disable-startup.ps1 可执行此操作。启动耗时记录在仅管理员可访问的 Diagnostics-Performance 日志中(scripts/boot-perf.ps1 会回退到内核事件):健康 SSD 登录耗时为 15–25 秒,存储故障时则为 60 秒或更久。详情见:references/manual-queries.md。
崩溃分析与转储排查
事件 41(Kernel-Power)是崩溃记录:Properties[0] 是 BugCheck 代码(0x0 = 未记录,因此属于突然断电或卡死),非零的索引 6 表示电源按钮被按住。崩溃前的 10 分钟能说明情况:storahci 129 → 存储故障级联,GPU 驱动警告 → 驱动卡死,WHEA → 硬件故障,没有记录 → 完全卡死(scripts/crash-triage.ps1 -CrashTime …)。崩溃后没有转储文件 → 检查 CrashControl\CrashDumpEnabled 和页面文件大小。布局和解码表:references/manual-queries.md;停止代码:references/bugcheck-codes.md。
失控进程排查
关注稳定运行期间,而不是启动时——有东西正在此刻占用机器。 整个排查过程的关键只有一点:测量速率,而不是追溯来源。
累计 CPU 使用量只能告诉你某个进程曾经做过什么。孤儿进程扫描会告诉你它的父进程是否已退出。两者都找不到最耗资源的情况——进程卡住,但其监督进程正常运行;它占满一个核心附近的 CPU,却没有任何产出。
scripts/process-triage.ps1 # sample all, flag >=20% of a core
scripts/process-triage.ps1 -Name claude,node -Threshold 50 # hunt agent/editor spinners
scripts/process-triage.ps1 -Json | ConvertFrom-Json # machine-readable findings
scripts/process-triage.ps1 -Tree 35736 # what a kill takes, leaves-first
退出码 10 = 发现问题,0 = 正常。在一个时间窗口内采集两次 CPU 样本,显示单核占用百分比,以及专用提交量、运行时长和孤儿状态。它绝不会终止任何进程——-Tree 会输出有序列表,由调用方谨慎处理。
关键防护。 脚本会在报告前解析当前会话自身的进程祖先链——shell → Agent 主机 → 应用程序,并将每一环标记为 protected=True。终止其中任何一个进程都会结束正在进行调查的会话,因此绝不能让它们与候选进程无法区分。手动操作时,意味着在查看其他任何内容之前,先通过 ParentProcessId 沿 PID 向上追溯自身进程链。
然后按从叶节点开始的顺序终止:先终止最深层的后代,再终止其监督进程,以免仍在运行的父进程重新创建已清理的子进程。后续条目报告“已不存在”表示级联清理正常运行,并非错误。终止进程不会删除文件——其目录中的未提交工作会原样保留。
报告提交量,而非 RAM。 Windows 会先耗尽提交量(RAM + 页面文件保证额度,Win32_OperatingSystem.FreeVirtualMemory),再耗尽物理内存,因此即使机器还有可用 RAM,也可能无法启动任何程序。报告进程数、专用提交量和机器可用提交量的前后变化——释放提交量通常比所终止进程的提交量总和更能恢复系统资源。
有关三类故障、排查流程、Electron/Agent 主机拓扑、过时构建检测以及工作树拆除情况的详细信息,请参阅references/process-triage.md。
事件日志查询模式
使用 Get-WinEvent -FilterHashtable 进行筛选(速度远快于 Where-Object);可用键:references/manual-queries.md。
常见故障模式
| 症状 | 首要检查项 | 常见原因 |
|---|---|---|
映射驱动器显示 Disconnected / UNC 路径无法访问 | 这是网络映射吗?Get-SmbMapping | 交由 net-ops 处理——并非本地存储故障 |
| 启动缓慢,以前很快 | boot-perf.ps1,然后检查 health-audit.ps1 的启动部分 | 冗余内容累积(Docker、Adobe CC、Electron 应用) |
| 启动缓慢,且越来越严重 | disk-health.ps1 | 驱动器故障——Windows 一直等待探测超时 |
| 随机冻结并强制重启 | disk-health.ps1 + crash-triage.ps1 | storahci 重置级联导致内核卡死 |
| 从睡眠状态唤醒时出现 BSOD | crash-triage.ps1(BugCheck 0x9F) | 驱动电源状态故障(通常是 GPU、USB) |
| 出现 BSOD 前有 WHEA 记录 | crash-triage.ps1(BugCheck 0x124) | 硬件故障——RAM、CPU、PCIe 通道 |
| 系统迟缓但没有崩溃 | health-audit.ps1 性能部分 | 后台进程堆积 |
| 登录需要几分钟 | boot-perf.ps1(启动后耗时),然后运行 safe-disable-startup.ps1 -List | 启动项缓慢,并同步阻塞 shell |
恢复模式
从故障硬盘克隆
切勿在故障硬盘上运行 chkdsk /f——修复操作会向坏扇区写入数据,可能彻底损坏硬盘。先创建映像,再修复映像。
# Healthy-side clone with no retries (fast, skips bad sectors)
robocopy "Y:\important" "Z:\backup\important" /MIR /R:0 /W:0 /XJ /NDL /LOG:clone.log
若要从存在大量坏扇区的硬盘中恢复位级数据,请使用 ddrescue(通过 WSL 或 Linux Live USB),并使用映射文件,以便中断后继续操作。相关说明见 references/storage-events.md。
物理断开故障硬盘
如果硬盘导致启动卡顿或崩溃:
- 通过
disk-health.ps1找到该硬盘 - 确认没有关键内容依赖它(
scripts/disk-health.ps1 -CheckDependencies <drive-letter>) - 物理拔下 SATA 线,或在 BIOS 中禁用,或在
diskpart中将其设为脱机 - 重启——启动时间应会显著缩短,控制器重置也应停止
语气与输出风格
输出遵循 claude-mods 的诊断规范:
- 扫描结果行使用
[PASS]/[FAIL]/[WARN]/[INFO]前缀 - 在底部提供结论块,列出具体发现和建议操作
- 硬盘标识信息包括物理磁盘编号、型号、容量和盘符
- 崩溃引用包括 UTC 时间戳、BugCheck 代码、主要参数和疑似原因
- 不使用营销用语,脚本中不使用表情符号(适合时可在 SKILL.md 文案中使用)
本技能不涵盖的内容
- 网络诊断,包括任何看似存储相关、但实际位于网络上的问题 → 使用
net-ops。具体包括:映射的网络驱动器、映射卡在Disconnected/Unavailable状态、无法打开的 UNC 路径(\\server\share)、SMB 本身、NAS 或 Synology 设备、net use故障,以及共享文件夹上的“拒绝访问”。盘符并不意味着它是本地驱动器。 - 应用性能分析(火焰图、py-spy/pprof、负载测试、慢查询)→ 使用
perf-ops。两者的分工是:windows-ops 对工作站进行分诊——找出哪个进程在消耗系统资源,以及是否可以安全终止;perf-ops 则分析你正在优化的程序内部性能。 - 源代码级调试 → 使用
debug-ops - 使用 WinDbg 分析内核转储文件——此主题过于专业,不属于本技能范围;这里只提供参考文档指引
- 组策略诊断——企业环境中相关,但在工作站上较少见
- WSL 发行版内部问题(Linux 软件包、服务、Linux 应用自身的故障)——请使用 Linux 侧技能。WSL 本身的问题(配置、网络模式、磁盘)属于本技能范围:references/wsl.md
交叉参考
| 情况 | 使用 |
|---|---|
故障“硬盘”是网络映射或 NAS 共享(SMB、UNC、Disconnected) | 由 net-ops 负责——使用 scripts/windows/smb-audit.ps1 处理映射及 SMB/LAN 排查流程 |
| 需要对远程 Windows 设备进行分诊 | 可直接套用 net-ops 的反向探测模式 |
| 崩溃与网络有关 | 结合使用 net-ops,排查 DNS / VPN 驱动问题 |
| 多台计算机出现相同情况 | 在每台计算机上运行 health-audit.ps1,然后比较输出 |
| 被标记的转圈图标指向一个已不存在的 git worktree | worktree 生命周期由 fleet-ops 负责——拆除顺序的隐患 |
| 需要分析应用内部性能,而不是对整台设备进行分诊 | perf-ops |
WSL:.wslconfig 未生效、NAT 与镜像网络模式、Hyper-V 防火墙、发行版磁盘只增不减 | references/wsl.md;Docker Desktop 的引擎及其 WSL 数据磁盘 → docker-ops |
参考资料
references/storage-events.md— 磁盘和控制器事件 ID、故障阈值references/bugcheck-codes.md— BSOD 停止代码及其可能原因references/startup-mechanisms.md— 五种启动机制、厂商自动启动钩子references/recovery-patterns.md— 数据恢复、chkdsk 决策树、BCD 和无法启动时的修复;进行任何破坏性操作前先加载references/uac-attribution.md— 当时及事后如何查明是谁请求了管理员权限references/process-triage.md— 转圈、孤儿进程、占用资源的进程;安全终止顺序references/remote-diagnostics.md— 如何对远程计算机运行此技能references/symptom-guide.md— 按问题分类的症状与信号references/manual-queries.md— 脚本自动执行的查询和解码表references/worked-example.md— 一个故障硬盘案例的完整处理过程references/wsl.md— WSL 2:.wslconfig和wsl.conf、网络模式、Hyper-V 防火墙、DNS、/mnt/c速度、发行版磁盘(调整大小、稀疏、压缩)
何时加载每份资料的完整说明:references/reference-index.md。
完整示例
对一台启动缓慢且频繁崩溃的 PC,依次运行 health-audit.ps1、disk-health.ps1 和 drive-dependencies.ps1 面板,然后进入修复循环。每个脚本都支持 -Json(供 jq 使用)和 -Verbose,通过管道传输时会省略面板装饰。面板和完整命令序列:references/worked-example.md。