PowerShell 面向对象的命令行
PowerShell 与传统命令行(如 CMD 或 Bash)最大的区别在于:PowerShell 的命令输出是对象,而不是纯文本。
PowerShell 比起传统命令行更加灵活、强大,也让脚本编写和系统管理更加高效。
什么是"对象导向命令行"
在传统命令行中,命令之间通过管道 | 传递的是字符串文本,要想进一步处理这些文本,通常需要借助 grep、awk、sed 等工具。
而在 PowerShell 中,命令之间通过管道传递的是对象,可以直接访问对象的属性和方法,无需解析文本,大大提高了准确性和开发效率。
命令输出的是对象
以 Get-Process 命令为例:
Get-Process
该命令用于获取当前系统中运行的进程列表。
Get-Process 命令返回的并不是纯文本表格,而是一组 .NET 对象,每个进程是一个 System.Diagnostics.Process 类型的对象。
我们可以像访问编程语言中的对象那样访问其属性,例如:
(Get-Process)[0].Name
上述命令表示获取第一个进程的名称,输出示例:
explorer
查看对象的结构:Get-Member
要深入理解对象,关键在于掌握它有哪些属性和方法。PowerShell 提供了 Get-Member
命令来帮助我们探索对象结构:
Get-Process | Get-Member
部分输出示例:
Name MemberType Definition ---- ---------- ---------- Id Property int Id {get;} Name Property string Name {get;} Kill Method void Kill() Start Method void Start()
说明:
Property
表示对象的属性,如Id
、Name
Method
表示对象的方法,如Kill()
、Start()
你可以通过 对象.属性
或 对象.方法()
的形式使用这些成员。
对象管道传递
管道传递的是对象
在 PowerShell 中,多个命令通过 |
连接时,传递的是对象而非文本。
这意味着你可以在后续命令中直接访问前一个命令传递的对象属性。
示例:筛选所有状态为 Running
的服务:
Get-Service | Where-Object { $_.Status -eq 'Running' }
解释:
$_
表示当前管道中的对象Status
是服务对象的一个属性
管道操作流程图(Mermaid)
常用对象处理命令
PowerShell 提供了一系列用于操作对象的内置命令,常用于筛选、排序、分组、导出等场景:
命令 | 作用说明 |
---|---|
Where-Object |
条件筛选对象 |
Select-Object |
选择或重命名对象属性 |
Sort-Object |
根据某个属性对对象排序 |
Group-Object |
按属性对对象进行分组统计 |
Measure-Object |
统计对象数量、总和、平均等 |
Export-Csv |
将对象导出为 CSV 文件 |
ConvertTo-Json |
将对象转换为 JSON 格式字符串 |
对象属性筛选与计算列
选择特定属性
Get-Process | Select-Object Name, Id, CPU
该命令提取每个进程的名称、ID 和 CPU 使用情况。
添加计算列(自定义属性)
你可以通过脚本块添加自定义属性:
Get-Process | Select-Object Name, @{Name="MemoryMB";Expression={$_.WorkingSet / 1MB -as [int]}}
说明:
@{}
创建一个哈希表定义新属性Name
指定新列名称Expression
提供计算逻辑
排序与分组操作
对进程按 CPU 使用率排序
Get-Process | Sort-Object CPU -Descending
按服务状态分组
Get-Service | Group-Object Status
输出示例:
Count Name Group ----- ---- ----- 75 Running {WinDefend, WSearch, ...} 35 Stopped {Fax, Spooler, ...}
导出与结构化数据
导出为 CSV 文件
Get-Service | Select-Object Name, Status | Export-Csv -Path services.csv -NoTypeInformation
转换为 JSON 格式
Get-Service | ConvertTo-Json
这些格式便于与其他系统或 API 进行集成,是自动化工作流的重要部分。
典型实用案例
案例 1:查找最耗 CPU 的前 5 个进程
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU
案例 2:按服务状态统计数量
Get-Service | Group-Object Status | Select-Object Name, Count
小结与建议
PowerShell 的面向对象特性,使得命令行操作更符合程序设计思维。通过对象的属性和方法,用户可以更精准地操作系统资源,构建更强大和可靠的自动化脚本。
初学者建议从以下几个方面入手巩固:
- 多使用
Get-Member
探索对象结构 - 熟练掌握
Where-Object
和Select-Object
的用法 - 尝试使用
Group-Object
、Sort-Object
处理数据 - 尝试将命令结果导出为 CSV 或 JSON 文件
点我分享笔记