约 2003 字

约 10 分钟

#对象与成员

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 可以查看集合本身的成员。

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2