如何仅在Windows系统C盘为机械硬盘(HDD)而非SSD时执行defrag操作
仅C盘为HDD时执行碎片整理的PowerShell实现方案
注意:所有操作需要以管理员身份运行PowerShell才有权限读取磁盘硬件信息、执行碎片整理命令
完整可执行脚本
# 定位C盘所在的物理磁盘 $cDisk = Get-Partition -DriveLetter C | Get-PhysicalDisk # 介质类型判定:3=SSD,4=HDD if ($cDisk.MediaType -eq 4) { Write-Host "C盘介质为机械硬盘,开始执行碎片整理" defrag C: /O Write-Host "碎片整理执行完成" } else { Write-Host "C盘介质为固态硬盘/无法识别,跳过碎片整理" }
核心逻辑说明
- 介质判定规则:
Get-PhysicalDisk返回的MediaType为枚举值,直接比对数值即可避免字符串匹配的兼容性问题,取值对应关系为:- 0:无法识别的介质类型
- 3:固态硬盘(SSD)
- 4:机械硬盘(HDD)
- 磁盘映射逻辑:先通过
Get-Partition定位C盘分区,再关联到对应的物理磁盘,避免多磁盘设备下误判其他磁盘的介质类型 - 安全冗余:碎片整理命令使用
/O参数,会自动根据磁盘类型执行对应优化操作,即使判定逻辑出现异常,也不会对SSD执行会缩短寿命的常规碎片整理操作
特殊场景适配
- 如果运行脚本时返回介质类型为0(无法识别),可手动添加自定义判定逻辑:读取磁盘的随机寻道时间、转速等参数辅助判定,或直接指定跳过操作即可。
- 如果是Windows 7系统,将脚本中的defrag命令替换为
defrag C: /H /U /V即可正常运行。 - 如果需要配置定时执行,在Windows任务计划程序中导入该脚本时,勾选「使用最高权限运行」选项即可。
内容的提问来源于stack exchange,提问作者Angelo Tashji Cusah Lo Iacono
相关产品推荐
相关产品推荐

