#对象与成员
PowerShell 的管道传递的是对象,而不是纯文本。每个对象都有自己的类型、属性和方法,理解这些概念是使用 Where-Object、Select-Object 等对象操作命令的基础。
#对象、属性与方法
- 对象:具有类型和数据的实例,例如一个进程、一个文件或一条服务记录。
- 属性:描述对象状态的数据,例如进程的
Id、文件名Name。 - 方法:对象可以执行的操作,例如字符串的
ToUpper()、进程的Kill()。
#查看对象的成员
Get-Member 用于查看对象的类型、属性和方法:
> Get-Process -Name pwsh | Get-Member
TypeName: System.Diagnostics.Process
Name MemberType Definition
---- ---------- ----------
Id Property int Id {get;}
ProcessName Property string ProcessName {get;}
...
- 默认视图显示对象的属性和方法,不会显示静态成员和内在成员。
- 更多用法详见 Get-Member 帮助手册。
#访问属性
使用点号 . 访问对象属性:
> $process = Get-Process -Name pwsh | Select-Object -First 1
> $process.ProcessName
> $process.Id
> $process.WorkingSet64
如果变量中保存的是对象集合,访问属性会返回由各对象属性值组成的集合:
> $processes = Get-Process -Name pwsh
> $processes.ProcessName
> $processes[0].Id
#调用方法
方法名后必须带括号。需要参数时,将参数写在括号内:
> $obj = [pscustomobject]@{ Name = 'demo' }
> $obj.ToString()
> ' hello '.Trim()
ToString()是大多数对象都具有的方法。- 对象的常用方法也可以通过
Get-Member -MemberType Method查看。
#使用 [pscustomobject] 创建简单对象
[pscustomobject] 可以将哈希表转换为具有命名属性的对象:
> $obj = [pscustomobject]@{ Name = 'demo'; Count = 3 }
> $obj.Name
> $obj.Count
demo
3
- 这种对象的属性类型为
NoteProperty,适合临时组合数据。 - 使用
[pscustomobject][ordered]@{}可以保持属性定义的顺序。
#注意事项
- 属性名和方法名不区分大小写。
Get-Member默认不显示静态成员,需要时使用-Static。- 管道传递集合时,
Get-Member会按对象类型分别列出成员;使用-InputObject可以查看集合本身的成员。