PowerShell 与传统命令行(如 CMD 或 Bash)最大的区别在于:PowerShell 的命令输出是对象,而不是纯文本。
PowerShell 比起传统命令行更加灵活、强大,也让脚本编写和系统管理更加高效。
在传统命令行中,命令之间通过管道 | 传递的是字符串文本,要想进一步处理这些文本,通常需要借助 grep、awk、sed 等工具。
而在 PowerShell 中,命令之间通过管道传递的是对象,可以直接访问对象的属性和方法,无需解析文本,大大提高了准确性和开发效率。
以 Get-Process 命令为例:
Get-Process
该命令用于获取当前系统中运行的进程列表。
Get-Process 命令返回的并不是纯文本表格,而是一组 .NET 对象,每个进程是一个 System.DiagnostiC++s.Process 类型的对象。
我们可以像访问编程语言中的对象那样访问其属性,例如:
(Get-Process)[0].Name
上述命令表示获取第一个进程的名称,输出示例:
explorer
要深入理解对象,关键在于掌握它有哪些属性和方法。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
是服务对象的一个属性
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
提供计算逻辑
Get-Process | Sort-Object CPU -Descending
Get-Service | Group-Object Status
输出示例:
(Get-Process)[0].Name0
(Get-Process)[0].Name1
(Get-Process)[0].Name2
这些格式便于与其他系统或 API 进行集成,是自动化工作流的重要部分。
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU
Get-Service | Group-Object Status | Select-Object Name, Count
PowerShell 的面向对象特性,使得命令行操作更符合程序设计思维。通过对象的属性和方法,用户可以更精准地操作系统资源,构建更强大和可靠的自动化脚本。
初学者建议从以下几个方面入手巩固:
多使用 Get-Member
探索对象结构
熟练掌握 Where-Object
和 Select-Object
的用法
尝试使用 Group-Object
、Sort-Object
处理数据
尝试将命令结果导出为 CSV 或 JSON 文件