PowerShell 的 8 个核心概念
掌握这 8 点,你就真正理解了 PowerShell 的灵魂,而不是只会背命令。
| # | 核心概念 | 含义 + 为什么重要 | 经典例子 |
|---|---|---|---|
| 1 | 一切都是对象(Everything is an Object) | PowerShell 输出的不是文本,而是 .NET 对象(有属性和方法)。这才是它比 cmd/bash 强大 100 倍的根本原因。 | Get-Process code → 返回的是 [System.Diagnostics.Process] 对象,可以直接点出 .CPU、.StartTime |
| 2 | Cmdlet(命令) = 动词-名词 | 所有命令都严格遵循 Verb-Noun 格式,动词是标准集合(Get/Set/New/Remove/Start/Stop…)。看名字就知道能干什么。 | Get-Service, Stop-Process, New-Item, Remove-ADUser |
| 3 | 管道传输的是对象,不是文本 | | 左边的命令把完整对象传给右边,而不是像 bash/cmd 那样只传文本。所以可以一直点属性过滤、排序、计算。 | Get-Process | Sort-Object CPU -Descending | Select -First 5 |
| 4 | 成员访问(. 和 ()) | 用 .属性 取值,用 .方法() 执行动作,这是日常 80% 的操作。 | $proc.CPU、$proc.Kill()、$path.Length、$date.AddDays(30) |
| 5 | 类型系统与强制转换 | PowerShell 是强类型语言,但会自动帮你转换。需要时用 [int], [datetime], [xml] 等强制转换。 | [datetime]"2025-12-03"、[int]"123abc" → 123 |
| 6 | 提供者(Providers)与驱动器(PSDrives) | PowerShell 把文件系统、注册表、环境变量、证书、Active Directory 都当成“磁盘”来操作,命令完全一样。 | cd HKLM:\SOFTWARE\Microsoftdir Env:\PATHGet-Item Cert:\LocalMachine\My |
| 7 | 脚本块 { } 与 & 调用运算符 | { } 是代码块,可以当参数、变量、当函数用。& 是“执行这个变量里的命令或脚本”。 | Get-Process | Where-Object {$_.CPU -gt 1000}$action = { param($x) $x*2 }; & $action 5 |
| 8 | 模块与命令发现系统 | 所有功能都以模块(Module)形式组织,Get-Command 和 Get-Module 是你最强大的“搜索引擎”。 | Get-Command -Module ActiveDirectoryImport-Module Microsoft.PowerShell.Utility |
一张图记住 PowerShell 的数据流向
命令 → [对象] → | 管道 → [对象] → | 管道 → [对象] → 最终输出(Format-*)
只要中间不经过 Out-String 或 | Select * 这种“把对象变回纯文本”的操作,管道里永远是完整对象!
快速验证这 8 个概念(复制粘贴即刻体验)
# 1. 一切都是对象
(Get-Process -Id $PID).GetType().FullName
# 2. 动词-名词
Get-Command Get-*
# 3. 管道传对象
Get-Service | Where-Object Status -eq 'Running' | Select Name,DisplayName -First 5
# 4. 成员访问
(Get-Date).AddDays(100)
(Get-Process)[0].Kill() # 小心!会杀掉第一个进程
# 5. 强制转换
[xml]$xml = Get-Content .\test.xml
[int]"00500"
# 6. 提供者
Get-PSDrive
Set-Location Alias:
Get-ChildItem
# 7. 脚本块
$sb = { "今天是 $(Get-Date -Format yyyy年MM月dd日)" }
& $sb
# 8. 模块
Find-Module *excel* # 找可以无 Office 操作 Excel 的模块
Get-Command -Noun PSReadLine* # 看看你现在用的命令行补全功能来自哪个模块
记住这 8 个核心概念后,你看任何 PowerShell 脚本都不会再懵逼——因为它们全部都是围绕这 8 点展开的。
接下来你想深入哪个概念?我可以立刻给你实战+进阶案例(比如“管道高级技巧”“自定义对象”“提供者开发”等等)。