文章目录
一、震惊!Windows竟有两个命令行工具?
(摸鱼必看)最近给新同事培训时发现,90%的Windows用户都不知道系统里藏着两个命令行工具!一个是我们熟悉的CMD小黑窗,另一个则是名字带"Power"的PowerShell。这两个工具长得像双胞胎,但实际能力却天差地别!
先上硬核对比表,3秒看懂核心差异:
| 对比项 | CMD | PowerShell |
|---|---|---|
| 诞生时间 | 1987年(MS-DOS时代) | 2006年(.NET时代) |
| 命令类型 | 文本处理 | 对象处理 |
| 脚本扩展名 | .bat/.cmd | .ps1 |
| 管道传输内容 | 纯文本 | 结构化对象 |
| 内置命令数量 | ~80个 | ~300个 |
| 跨平台支持 | ❌ | ✅(Win/Linux/macOS) |
| 模块化扩展 | ❌ | ✅ |
| 远程管理 | 有限 | 原生支持 |
二、实战对比:同样的命令不同的世界
1. 文件列表查看大比拼
CMD老将:
dir /s *.txt
PowerShell新秀:
Get-ChildItem -Recurse -Filter *.txt | Format-Table Name, Length, LastWriteTime
(划重点)CMD返回的是冰冷的文本,而PowerShell返回的是鲜活的对象!这意味着我们可以直接操作文件属性:
# 批量修改文件后缀名
Get-ChildItem *.txt | Rename-Item -NewName { $_.Name -replace 'txt$','md' }
2. 系统服务管理谁更强?
CMD的极限操作:
sc query state=all
net start > services.txt
PowerShell的降维打击:
Get-Service | Where-Object Status -eq 'Running' | Export-Csv running_services.csv
Stop-Service -Name 'WinDefend' -Force -PassThru
(实战技巧)用PowerShell还能玩出花:
# 监控服务状态变化
Get-Service -Name 'wuauserv' |
ForEach-Object {
while($true) {
$current = Get-Service -Name $_.Name
if($current.Status -ne $_.Status) {
Write-Host "[$(Get-Date)] 状态变化:$($_.Status) → $($current.Status)" -ForegroundColor Red
$_.Status = $current.Status
}
Start-Sleep -Seconds 5
}
}
三、深度解密:PowerShell的七大必杀技
1. 对象管道黑科技
传统CMD管道:
type log.txt | find "error"
PowerShell管道:
Get-Content log.txt | Where-Object { $_ -match 'error' } | ForEach-Object {
[PSCustomObject]@{
LineNumber = $_.ReadCount
Content = $_
}
} | Export-Excel errors.xlsx
(颠覆认知)对象管道意味着:
- 保留完整元数据
- 支持属性直接访问
- 无需复杂的文本解析
2. 模块化武器库
安装模块只需一句:
Install-Module -Name PSWindowsUpdate -Force
然后就能玩转Windows更新:
Get-WindowsUpdate -Install -AcceptAll -AutoReboot
3. 远程管理全家桶
跨机器执行命令:
Invoke-Command -ComputerName Server01,Server02 -ScriptBlock {
Get-Process | Sort-Object CPU -Descending | Select-Object -First 3
}
四、CMD还没被淘汰的三大理由
- 兼容性之王:很多遗留批处理脚本仍在使用
- 轻量级首选:在低配设备上启动更快(实测快0.3秒)
- 肌肉记忆:老司机的条件反射操作
(求生指南)混合使用技巧:
# 在PowerShell中调用CMD命令
cmd /c 'systeminfo | findstr /B /C:"OS Name"'
五、终极选择指南(对号入座版)
✅ 选择CMD的场景:
- 运行旧的.bat脚本
- 临时执行简单命令
- 在古董级系统上操作
✅ 选择PowerShell的场景:
- 自动化运维任务
- 需要处理结构化数据
- 跨平台脚本开发
- 与云服务/API交互
- 编写可维护的脚本
(私藏建议)试试这个过渡方案:
function legacy {
param(
[Parameter(ValueFromRemainingArguments)]
$args
)
cmd /c ($args -join ' ')
}
# 现在可以这样用
legacy dir /s /b *.ini
六、升级你的命令行体验(压箱底配置)
在profile.ps1中添加:
# 兼容CMD常用命令
Set-Alias which Get-Command
Set-Alias ipconfig (Get-Command Get-NetIPConfiguration)
Set-Alias tracert (Get-Command Test-NetConnection).Path
# 智能历史记录
Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -HistorySearchCursorMovesToEnd
七、未来已来:PowerShell 7的惊喜
2023年发布的PowerShell 7.3带来了:
- 并行管道处理(ForEach-Object -Parallel)
- 三元运算符优化
- 更智能的类型推断
- 原生支持ARM64设备
安装命令:
winget install --id Microsoft.PowerShell --source winget
最后的灵魂拷问
还在用CMD的你,就像拿着诺基亚在5G时代打电话——能用,但真的香吗?从今天开始,每天用PowerShell替换一个CMD命令,一个月后你会回来感谢我的!
(彩蛋)试试这个CMD永远做不到的操作:
# 生成系统健康报告
Get-CimInstance -ClassName Win32_OperatingSystem |
Select-Object Caption, Version, FreePhysicalMemory,
@{Name='Uptime';Expression={(Get-Date) - $_.LastBootUpTime}} |
ConvertTo-Html |
Out-File system_report.html
Invoke-Item system_report.html
2万+

被折叠的 条评论
为什么被折叠?



