什么是PowerShell?Windows自带的“超级命令行”全面介绍
前言
很多Windows用户用过CMD(命令提示符),但未必知道系统里还藏着一个更强大的“命令行神器”——PowerShell。它能做哪些CMD做不到的事?为什么有人说它像Linux终端?这篇文章为你完整介绍PowerShell。
目录
一、PowerShell是什么?
二、PowerShell的诞生背景(简史)
1. 为什么微软要做PowerShell?
2. 发展里程碑
三、PowerShell的核心特性(这才是重点)
1. 一切皆对象,管道传递对象
2. 统一的命令命名规范:动词-名词(Verb-Noun)
3. 可以像访问文件系统一样访问其他系统组件
4. 强大的脚本语言和自动化能力
5. 别名系统:兼容Linux/CMD习惯
四、PowerShell与CMD、WSL的区别(一图看懂)
五、我应该学PowerShell吗?(适用场景)
1. 非常适合以下人群
2. 一个小例子:批量重命名照片
六、如何开始学习/使用PowerShell?
1. 打开方式
2. 常用命令入门
3. 升级到最新版Windows 10/11自带PowerShell 5.1,建议从GitHub安装PowerShell 7(跨平台版),体验更佳。
总结
演示:在PowerShell里输入 Get-Alias,看看有多少你熟悉的“老朋友”~
一、PowerShell是什么?
PowerShell是微软开发的一款跨平台命令行Shell和脚本语言。它于2006年首次发布,内置在Windows 7及之后的所有Windows版本中,并且从2016年起开源并支持macOS和Linux。
通俗地说:
Shell:像CMD一样,你可以敲命令、运行程序、管理文件。
脚本语言:你可以把多条命令写入
.ps1脚本文件,实现复杂的自动化任务。
它和CMD最本质的区别在于:
CMD处理的是文本(你看到什么,管道就传什么文本)。
PowerShell处理的是.NET对象(命令输出的不是字符串,而是带有属性的对象,管道传递的是对象本身)。
这就像一个是“传纸条”(文本),一个是“传Excel表格”(结构化对象)——后者能做的事情要多得多。
二、PowerShell的诞生背景(简史)
1. 为什么微软要做PowerShell?
在2000年代初期,Windows系统管理员面临一个尴尬局面:
要管理Windows服务器,主要靠图形界面(点击鼠标)或者CMD里有限的命令。
而Linux/Unix管理员早已习惯用强大的Shell脚本批量完成配置、监控、维护。
微软意识到,必须为Windows打造一个现代化的命令行环境。2002年,代号“Monad”的项目启动,负责人是Jeffrey Snover(后来被称为“PowerShell之父”)。他的名言是:
“我们不是在写一个更好的CMD,而是在解决系统管理的大问题。”
2. 发展里程碑
2006年:PowerShell 1.0 发布,面向对象管道、Cmdlet概念正式亮相。
2009年:Windows 7 / Server 2008 R2 开始内置PowerShell。
2016年:PowerShell开源,发布.NET Core版(PowerShell Core 6.0),支持Linux/macOS。
2020年后:PowerShell 7 成为长期支持版本,统一Windows和跨平台体验。
三、PowerShell的核心特性(这才是重点)
1. 一切皆对象,管道传递对象
这是PowerShell最根本的突破。例如,查看进程:
Get-Process输出的不是一堆文字,而是System.Diagnostics.Process对象的集合。你可以直接筛选、排序、操作这些对象:
# 找出占用内存超过100MB的进程 Get-Process | Where-Object { $_.WorkingSet64 -gt 100MB } # 按CPU使用率排序,显示前5个 Get-Process | Sort-Object CPU -Descending | Select-Object -First 5而在CMD里,你必须用复杂的文本解析(findstr、for循环)才能勉强实现,而且极易出错。
2. 统一的命令命名规范:动词-名词(Verb-Noun)
PowerShell的所有原生命令(叫Cmdlet,读作“command-let”)都遵循动词-名词格式,英语阅读友好:
| 动词 | 名词 | Cmdlet | 作用 |
|---|---|---|---|
| Get | Process | Get-Process | 获取进程 |
| Stop | Process | Stop-Process | 停止进程 |
| Get | Service | Get-Service | 获取服务 |
| Set | Location | Set-Location | 设置当前目录(相当于cd) |
| Get | ChildItem | Get-ChildItem | 获取子项(相当于ls/dir) |
这种命名方式让你不需要死记硬背——想做什么事,先想动词(Get/Set/New/Remove/Start/Stop...),再想名词,猜个八九不离十。
3. 可以像访问文件系统一样访问其他系统组件
PowerShell的“提供程序”(Provider)模型,让你能统一浏览不同类型的存储:
# 查看当前目录 Get-Location # 切换到注册表(就像切到D盘一样) cd HKLM:\SOFTWARE\ dir # 列出注册表项 # 切换到证书存储 cd Cert:\CurrentUser\My\ dir # 列出个人证书支持的Provider包括:文件系统、注册表、证书、环境变量、WSMan、Active Directory等。你可以用Get-PSProvider查看全部。
4. 强大的脚本语言和自动化能力
PowerShell脚本(.ps1)支持:
变量(
$name = "张三")条件判断(
if、switch)循环(
foreach、while)函数、错误处理(
try/catch)、模块化。
一个典型的管理脚本示例:批量停止某类服务并记录日志。
$services = Get-Service | Where-Object { $_.Name -like "spool*" } foreach ($svc in $services) { Stop-Service $svc.Name -Force Write-Host "已停止: $($svc.Name)" }5. 别名系统:兼容Linux/CMD习惯
这就是为什么你会觉得“像切换到Linux”。
PowerShell为常用Cmdlet提供了短别名,方便不同背景的用户:
| 别名 | 真正的Cmdlet | 来源 |
|---|---|---|
ls | Get-ChildItem | Linux |
pwd | Get-Location | Linux |
cat | Get-Content | Linux |
dir | Get-ChildItem | CMD |
cd | Set-Location | 通用 |
ps | Get-Process | Linux |
注意:这些别名只是“快捷方式”,不是真的Linux命令。你可以用Get-Alias ls验证。
四、PowerShell与CMD、WSL的区别(一图看懂)
| 特性 | CMD | PowerShell | WSL |
|---|---|---|---|
| 处理数据 | 文本 | .NET对象 | Linux内核环境 |
| 默认命令 | dir,copy,del | Get-ChildItem,Copy-Item,Remove-Item | ls,cp,rm(真正的Linux工具) |
| 脚本扩展名 | .bat | .ps1 | .sh或任何Linux脚本 |
| 访问注册表 | 通过reg命令 | 直接cd进注册表 | 需要额外工具 |
| 跨平台 | 仅Windows | Windows + macOS + Linux | 仅Windows(宿主Linux内核) |
结论:
CMD:老式兼容,日常简单命令还能用。
PowerShell:现代、强大、跨平台,适合管理和自动化。
WSL:需要真正运行Linux二进制程序时用(比如编译Linux内核、运行Docker原生Linux容器)。
五、我应该学PowerShell吗?(适用场景)
1.非常适合以下人群
Windows系统管理员:管理AD、IIS、Hyper-V、Exchange等,官方大量提供PowerShell模块。
开发运维(DevOps):用PowerShell编写CI/CD脚本、配置管理(配合DSC)。
数据分析师/科学家:PowerShell可以处理CSV/JSON/XML,调用REST API。
想提升工作效率的普通用户:批量重命名文件、自动备份、监控系统状态。
2.一个小例子:批量重命名照片
# 把当前目录所有.jpg文件改成“假期_001.jpg”格式 $i=1 Get-ChildItem *.jpg | ForEach-Object { Rename-Item $_ -NewName ("假期_{0:D3}.jpg" -f $i++) }这种任务在CMD里要写好长一串,PowerShell只需几行。
六、如何开始学习/使用PowerShell?
1. 打开方式
按
Win + R,输入powershell,回车。或者右键“开始”菜单,选择“Windows PowerShell”或“终端”。
2. 常用命令入门
| 想做什么 | 命令示例 |
|---|---|
| 查看帮助 | Get-Help Get-Process |
| 查看当前目录 | Get-Location(或pwd) |
| 列出文件 | Get-ChildItem(或ls) |
| 查看进程 | Get-Process |
| 查看服务 | Get-Service |
| 查看命令历史 | Get-History |
3. 升级到最新版
Windows 10/11自带PowerShell 5.1,建议从GitHub安装PowerShell 7(跨平台版),体验更佳。
总结
| 问题 | 答案 |
|---|---|
| PowerShell是CMD的升级版吗? | 不完全是,它是完全重写的现代化Shell,与CMD不是同一个东西。 |
为什么能敲ls、pwd? | 内置了Linux风格别名,方便跨平台用户,但背后执行的仍是Windows原生Cmdlet。 |
| 它比CMD强在哪? | 对象管道、统一命令命名、访问注册表/证书、强大的脚本能力。 |
| 能代替CMD吗? | 绝大多数场景可以,而且更高效。CMD保留主要为了兼容老脚本。 |
一句话记住PowerShell:
一个面向对象的、能像处理文件一样处理系统组件的、跨平台的现代化命令行和脚本环境。
如果你之前只知道CMD,那么从今天起,可以试着把powershell当作默认终端了。你会发现,Windows的命令行世界原来可以这么强大。
