如何基于磁盘/网络活动调整Windows 11的空闲睡眠阈值,避免文件传输时自动休眠
如何基于磁盘/网络活动调整Windows 11的空闲睡眠阈值,避免文件传输时自动休眠
我完全理解你的需求——既要让电脑在真正彻底空闲(磁盘、网络活动完全停止后满1小时)时自动休眠,又要在有文件传输(不管是FTP、SMB这类网络传输,还是本地磁盘读写)时保持唤醒状态,而且不想依赖特定应用的事件触发毕竟很多传输是从网络端发起的,本地根本没有对应的应用进程。下面给你几个实用的解决方案:
一、微软官方工具:PowerToys Awake(最省心的选择)
如果你不想折腾脚本或注册表,优先试试微软官方的PowerToys工具里的Awake模块,它专门解决这类“按需保持唤醒”的问题:
- 安装PowerToys后,打开Awake功能,切换到「智能唤醒」模式
- 在设置里你可以自定义:
- 磁盘使用率阈值:比如设置成5%,当磁盘读写占比超过这个数值时,阻止休眠
- 网络流量阈值:比如设置成10KB/s,有网络传输时保持唤醒
- 空闲超时时间:也就是活动停止后,等待多久允许系统休眠(比如设置成60分钟)
- 这个工具会实时监控系统活动,完全符合你的场景,而且是微软官方出品,稳定性有保障。
二、自定义PowerShell脚本(高度定制化)
如果你想自己控制监控逻辑,可以写一个PowerShell脚本,定期检查磁盘和网络活动,动态阻止/允许休眠:
示例脚本
# 可自定义参数 $diskUsageThreshold = 5 # 磁盘使用率阈值(%) $networkTrafficThreshold = 10240 # 网络流量阈值(字节/秒,即10KB) $idleWaitMinutes = 60 # 活动停止后等待多久允许休眠(分钟) $checkIntervalSeconds = 60 # 每次检查的间隔时间(秒) $idleCounter = 0 while ($true) { # 获取磁盘平均使用率 $avgDiskUsage = (Get-Counter '\PhysicalDisk(*)\% Disk Time').CounterSamples ` | Where-Object { $_.InstanceName -ne '_Total' } ` | Measure-Object -Property CookedValue -Average ` | Select-Object -ExpandProperty Average # 获取网络平均流量 $avgNetworkTraffic = (Get-Counter '\Network Interface(*)\Bytes Total/sec').CounterSamples ` | Where-Object { $_.InstanceName -ne '_Total' } ` | Measure-Object -Property CookedValue -Average ` | Select-Object -ExpandProperty Average # 判断是否有活动 if ($avgDiskUsage -gt $diskUsageThreshold -or $avgNetworkTraffic -gt $networkTrafficThreshold) { $idleCounter = 0 # 调用系统API阻止休眠 Add-Type @" using System; using System.Runtime.InteropServices; public class PowerControl { [DllImport("kernel32.dll")] public static extern uint SetThreadExecutionState(uint esFlags); } "@ [PowerControl]::SetThreadExecutionState(0x80000002) # ES_CONTINUOUS + ES_SYSTEM_REQUIRED } else { $idleCounter++ # 达到空闲时间后允许休眠 if ($idleCounter -ge ($idleWaitMinutes * 60 / $checkIntervalSeconds)) { [PowerControl]::SetThreadExecutionState(0x80000000) # ES_CONTINUOUS } } Start-Sleep -Seconds $checkIntervalSeconds }
设置开机自启动
- 把脚本保存为
KeepAwakeOnActivity.ps1 - 打开「任务计划程序」,创建新任务:
- 触发器:选择「当前用户登录时」
- 操作:选择「启动程序」,程序填
powershell.exe,参数填-WindowStyle Hidden -File "C:\路径\到\你的\脚本.ps1" - 勾选「不管用户是否登录都要运行」(可选,如果你希望远程用户连接时也生效)
三、关于Windows原生设置的说明
遗憾的是,Windows 11原生的电源设置不会把磁盘/网络活动算作“非空闲”——它默认只看鼠标、键盘这类用户输入。虽然可以通过注册表或组策略调整部分睡眠参数,但无法实现你需要的“基于磁盘/网络活动动态调整休眠阈值”的逻辑,所以还是得靠上面两种方案。
备注:内容来源于stack exchange,提问作者Spectraljump




