本文最后更新于 2026年5月30日。
一句话结论:
CMD 是老旧 DOS 遗留壳,只适合简单命令;PowerShell 是 .NET 全平台脚本语言,Windows 官方下一代终端,功能碾压 CMD。
一、为什么微软放着 CMD 不用,重做 PowerShell
1.CMD 先天局限(硬伤改不了)
- 语法是30年前DOS产物
del /f /s /q、xcopy、for /f参数杂乱无章,各家命令参数规则不统一。 - 只处理文本
CMD所有命令输出都是纯字符串,筛选文件、取磁盘容量、查进程只能靠截取文本,极易出错。
例:CMD拿C盘剩余空间,要手动字节换算GB,写一堆截取字符代码。
- 没有正规面向对象、数组、函数
批量运维AD、服务器、磁盘、注册表很难写。
2.PowerShell 核心优势(设计思路完全不同)
① 传递【对象】而不是文本(最大质变)
CMD:命令输出=一段文字,靠切字符串拿数据
PowerShell:命令输出=.NET对象,自带属性(大小、日期、路径、占用)
# 直接拿C盘剩余GB,不用算字节
(Get-PSDrive C).Free
② 统一动词+名词规范,记命令极简单
固定格式:动词-名词
Get-获取、Set-修改、Remove-删除、New-新建
Get-ChildItem 查看文件
Remove-Item 删除文件
Get-Process 查看进程
不用记乱七八糟 /s /f /q 这类零散参数。
③ 完整编程语言
- 原生循环、判断、数组、自定义函数、异常捕获
- 可读写注册表、WMI、AD域、Exchange、Azure云、Windows服务
企业运维批量管理几百台Windows服务器全靠PS,CMD做不到。
④ 跨平台
PowerShell Core 开源,Windows/Linux/macOS 通用,CMD仅限Windows。
二、日常使用场景对比
场景1:清理temp
- CMD:
del /f /s /q %temp%\*记一堆参数 - PS:
Remove-Item $env:temp\* -Recurse -Force参数表意清晰
场景2:筛选大于1GB的文件
CMD:需要for+findstr+字符截取,几十行易错代码
PS:
Get-ChildItem C:\ -Recurse | Where-Object {$_.Length -gt 1GB}
三、现状
- CMD不会被删除:兼容几十年老批处理脚本、老旧小工具,日常偶尔用。
- 微软主推PowerShell:系统设置、存储、安全、服务器运维、自动化脚本官方全给PS接口。
- 新版终端:Windows Terminal:同时支持CMD/PowerShell/WSL,PS是主力。
简单总结
- CMD = 简易老式命令框(日常删文件、开软件够用)
- PowerShell = Windows原生高级编程语言(自动化、运维、深度系统管理必备)