你有没有过这种经历:
网上搜"怎么清理 C 盘""怎么查电脑 IP",教程让你"打开命令提示符,输入 ipconfig"。你照做,弹出一个黑窗口,稀里糊涂敲完,解决了。
但下次再搜,又有教程说"打开 PowerShell,输入 Get-xxx"。
你懵了:这俩不是一个东西吗?长得差不多啊,到底该用哪个?
其实它们完全不是一回事——一个是从 DOS 时代活到现在的"老古董",一个是微软花了十几年打造的"现代化自动化工具"。今天用大白话讲清它俩的区别,看完你不会再选错。
一、一句话讲清本质区别
如果这篇文章你只记住一句,就记这句:
CMD 给你的是「一段文字」,PowerShell 给你的是「一张表格」。
听起来抽象?举个实际例子——你想找出最占内存的 5 个程序:
在 CMD 里:tasklist 会给你一屏文字。想排序?对不起,它没这功能,你得自己肉眼找,或者写一段很复杂的文本截取脚本。
在 PowerShell 里:Get-Process | Sort-Object WorkingSet -Descending | Select-Object -First 5,直接按内存排序输出前 5 名。
差别在哪?
- CMD 输出的是纯文本——就像打印在纸上的一张清单,你想再处理,得拿尺子按列数字符位置去"抠字";
- PowerShell 输出的是对象——就像一张 Excel 表,每一行是一个程序,每一列是它的属性(名字、PID、内存占用),你直接按列排序、筛选就行,不用抠字。
技术圈有句玩笑:CMD 递给你一张纸,PowerShell 递给你一张 Excel。这就是全部区别的根源,后面所有差异都从这里长出来。
二、先认识一下这两位
| CMD(命令提示符) | PowerShell |
|---|
| cmd.exe | powershell.exe |
| | 2006 年 |
| | |
| 文本 | 对象 |
| .bat | .ps1 |
| | PowerShell 7 支持 Win/Linux/Mac |
| | |
简单理解:CMD 是"Windows 的传家宝",为了兼容几十年前的老程序一直留着;PowerShell 是微软真正主推的现代命令行,能写脚本、能管系统、能连云端。
三、外观上怎么区分?(一张图看懂)
看两个地方就够:
- 颜色:传统 CMD 是黑底白字;Windows PowerShell 默认蓝底(现在都跑在 Windows Terminal 里,颜色能自己改,但老截图基本都是这样)。
- 提示符:CMD 开头是
C:\Users\你>,PowerShell 开头是 PS C:\Users\你> —— 多出来的 PS 就是它的身份证。
怎么打开?
- CMD
- PowerShell:
Win 键 → 输入 powershell → 回车(或右键开始菜单选"终端")
⚠️ 一个容易搞混的事:Win11 之后你打开的"终端(Windows Terminal)"既不是 CMD 也不是 PowerShell——它只是一个"装这些窗口的壳",像个浏览器标签页一样,里面可以开 CMD、PowerShell、甚至 Linux 子系统。而微软给它设的默认标签页是 PowerShell(设置 → 启动 → 默认配置文件可改)。
四、常用命令对照表(收藏这张就行)
| | |
|---|
| dir | Get-ChildItem |
| copy a b | Copy-Item a b |
| del 文件名 | Remove-Item 文件名 |
| cd 目录 | Set-Location 目录 |
| ipconfig | Get-NetIPAddress |
| tasklist | Get-Process |
| ping 地址 | Test-Connection 地址 |
| cls | Clear-Host |
重点来了:你会发现 dir、cd、cls、ping 这些在 PowerShell 里照样能用。
为什么?因为 PowerShell 给它们做了"别名(alias)"——你敲 dir,它其实偷偷帮你跑了 Get-ChildItem。这是微软为了照顾老用户习惯特意留的。
所以:PowerShell 能干 CMD 绝大部分的活,反过来不行。
五、PowerShell 到底强在哪?(三个真实场景)
1. 管道真的能"串起来"
两个都支持 | 管道符,但传的东西不一样:
- CMD:
| 传的是文本——上一条命令的输出变成一堆字,下一条命令只能去"抠字"; - PowerShell:
| 传的是对象——下一条命令直接拿到完整数据,随便按哪个字段筛。
# 找出所有占用 CPU 超过 10 的程序,按占用排序
Get-Process | Where-Object {$_.CPU -gt 10} | Sort-Object CPU -Descending
这一行在 CMD 里基本写不出来。
2. 它是正经的编程语言
CMD 的批处理只能做很简单的循环判断,错误处理基本靠猜(%ERRORLEVEL%)。
PowerShell 支持变量、循环、函数、try/catch 错误处理、模块、还能直接调用 .NET 类库——它本质上是一门脚本语言,不是"命令集合"。
3. 能管到系统深处
进程、服务、注册表、计划任务、网络适配器、Windows 功能……PowerShell 都能直接命令行管理,还能远程管理别的电脑,甚至对接 Azure、Microsoft 365、Active Directory。
这些 CMD 一个都做不到。
六、到底什么时候用哪个?(照着选就行)
用 CMD 的情况:
- 就是敲一条命令查个东西(
ipconfig、ping、sfc /scannow、chkdsk)——打字最快; - 网上的老教程写的是 CMD 命令,照抄就行,别费劲翻译;
- 进 WinPE / 恢复环境修电脑时,给你的往往就是 CMD。
用 PowerShell 的情况:
- 需要筛选、排序、导出结果(比如导出一份软件清单到 CSV);
- 要写脚本自动化(批量改文件名、定时清理临时文件);
- 处理 JSON / CSV / XML 这类结构化数据;
- 远程管理
- 同一件事你要做第二次以上
一句糙理:一次性的小事用 CMD,要重复做或要动脑子的事用 PowerShell。
七、新手最容易踩的 5 个坑
&& 在 PowerShell 里用不了 网上很多命令是 命令1 && 命令2(前一个成功才跑后一个)。这在 Windows PowerShell 5.1 里不支持(PowerShell 7 才加进来)。5.1 里要么分开两条跑,要么用 ; 分隔。
.ps1 脚本默认不让你跑 PowerShell 默认有执行策略(ExecutionPolicy)限制,双击 .ps1 脚本可能报错。想跑自己的脚本,需要先执行一次: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned (这是安全设计,不是 bug。CMD 的 .bat 没这道门,反而更危险。)
环境变量写法不一样 CMD 里是 %USERPROFILE%,PowerShell 里是 $env:USERPROFILE。
查帮助的方式不一样 CMD 是 命令 /?;PowerShell 是 Get-Help 命令 或 命令 -?。但注意:外部程序(比如 robocopy)还是得用 robocopy /?。
别把 PowerShell 命令粘到 CMD 里(反之亦然) Get-Process 粘进 CMD 会提示"不是内部或外部命令";CMD 的一些 for /f 语法粘进 PowerShell 也会挂。先看清楚教程写的是哪个,再决定开哪个窗口。
常见问题
Q1:那我到底该学哪个? 学 PowerShell。 它能干 CMD 所有的活(别名兼容 + 能调用任何 exe),还多了 CMD 做不到的一大堆。但 CMD 的基础命令也顺手记几个——因为网上大量排障教程是照着 CMD 写的。
Q2:PowerShell 里能直接跑 CMD 命令吗? 大部分能(ipconfig、ping、netstat、net user 这些都没问题)。少数 CMD 特有语法不行,这时候可以在 PowerShell 里写 cmd /c "命令" 强制用 CMD 跑。
Q3:CMD 会被微软取消吗? 目前没有任何官方宣布要移除 cmd.exe。个别老工具(比如 wmic)确实已经被移除、官方建议改用 PowerShell,但 CMD 本体还在,大量软件依赖它,短期内不会消失。
Q4:Windows Terminal 是什么?跟它俩什么关系? 它是窗口壳,不是命令行本身。从 Windows 11 22H2 起,微软把默认的控制台宿主换成了 Windows Terminal,CMD 和 PowerShell 都会跑在它里面。你可以把它理解成"能开多个标签页的容器",默认开的是 PowerShell。
Q5:Windows PowerShell 5.1 和 PowerShell 7 什么关系?我要装吗? 5.1 是系统自带的(不再加新功能,只修问题);7 是要另外装的新版本,跨平台、功能更强。普通用户用自带的 5.1 就够;想用新特性或跨平台再去装 7。
Q6:都需要管理员权限吗? 看命令本身。只是查询(ipconfig、dir)不需要;要改系统设置、管服务、改注册表,就得右键 → 以管理员身份运行——两个都是这个规矩。
Q7:为什么我照着教程输入命令没反应/报错? 八成是把 PowerShell 命令粘进了 CMD(或反过来),或者少了管理员权限。先确认你开的窗口是哪个,看提示符有没有 PS 前缀就知道。
总结
记住三句话就够:
- CMD 给你文字,PowerShell 给你数据
- PowerShell 能干 CMD 的活,反过来不行
- 照着教程抄命令时,先看是哪个窗口
下次再遇到"打开命令提示符输入 xxx"的教程,你就知道该开哪个、为什么了。
收藏这篇,省得下次又分不清。
本文基于微软官方文档(Microsoft Learn / Microsoft Support)与 PowerShell 官方资料整理。涉及版本行为的部分以 Windows 11 / Windows PowerShell 5.1 为准;PowerShell 7 在部分语法(如 &&)上行为不同,文中已标注。
阅读原文:点击这里
该文章在 2026/10/30 17:07:40 编辑过