Get-Member

获取对象的属性和方法。

语法

PowerShell
Get-Member
   [-InputObject <PSObject>]
   [[-Name] <String[]>]
   [-MemberType <PSMemberTypes>]
   [-View <PSMemberViewTypes>]
   [-Static]
   [-Force]
   [<CommonParameters>]

说明

Get-Member cmdlet 获取对象的成员、属性和方法。

若要指定对象,请使用 InputObject 参数或管道将对象 Get-Member。 若要获取有关静态成员的信息,类的成员(而不是实例)使用 Static 参数。 若要仅获取某些类型的成员(如 NoteProperties),请使用 MemberType 参数。

Get-Member 返回按字母顺序排序的成员列表。 首先列出方法,后跟属性。

示例

示例 1:获取进程对象的成员

此命令显示由 Get-Service cmdlet 生成的服务对象的属性和方法。

由于命令 Get-Member 部分没有任何参数,因此它使用参数的默认值。 默认情况下,Get-Member 不会获取静态成员或内部成员。

PowerShell
Get-Service | Get-Member

TypeName: System.Service.ServiceController#StartupType

Name                      MemberType    Definition
----                      ----------    ----------
Name                      AliasProperty Name = ServiceName
RequiredServices          AliasProperty RequiredServices = ServicesDependedOn
Disposed                  Event         System.EventHandler Disposed(System.Object, System.EventArgs)
Close                     Method        void Close()
Continue                  Method        void Continue()
Dispose                   Method        void Dispose(), void IDisposable.Dispose()
Equals                    Method        bool Equals(System.Object obj)
ExecuteCommand            Method        void ExecuteCommand(int command)
GetHashCode               Method        int GetHashCode()
GetLifetimeService        Method        System.Object GetLifetimeService()
GetType                   Method        type GetType()
InitializeLifetimeService Method        System.Object InitializeLifetimeService()
Pause                     Method        void Pause()
Refresh                   Method        void Refresh()
Start                     Method        void Start(), void Start(string[] args)
Stop                      Method        void Stop()
WaitForStatus             Method        void WaitForStatus(System.ServiceProcess.ServiceControllerSt...
BinaryPathName            Property      System.String {get;set;}
CanPauseAndContinue       Property      bool CanPauseAndContinue {get;}
CanShutdown               Property      bool CanShutdown {get;}
CanStop                   Property      bool CanStop {get;}
Container                 Property      System.ComponentModel.IContainer Container {get;}
DelayedAutoStart          Property      System.Boolean {get;set;}
DependentServices         Property      System.ServiceProcess.ServiceController[] DependentServices {get;}
Description               Property      System.String {get;set;}
DisplayName               Property      string DisplayName {get;set;}
MachineName               Property      string MachineName {get;set;}
ServiceHandle             Property      System.Runtime.InteropServices.SafeHandle ServiceHandle {get;}
ServiceName               Property      string ServiceName {get;set;}
ServicesDependedOn        Property      System.ServiceProcess.ServiceController[] ServicesDependedOn {get;}
ServiceType               Property      System.ServiceProcess.ServiceType ServiceType {get;}
Site                      Property      System.ComponentModel.ISite Site {get;set;}
StartType                 Property      System.ServiceProcess.ServiceStartMode StartType {get;}
StartupType               Property      Microsoft.PowerShell.Commands.ServiceStartupType {get;set;}
Status                    Property      System.ServiceProcess.ServiceControllerStatus Status {get;}
UserName                  Property      System.String {get;set;}
ToString                  ScriptMethod  System.Object ToString();

示例 2:获取服务对象的成员

此示例获取由 Get-Service cmdlet 检索的服务对象的所有成员(属性和方法),包括内部成员,例如 PSBasePSObject,以及 get_set_ 方法。

PowerShell
Get-Service | Get-Member -Force
(Get-Service Schedule).PSBase

Get-Member 命令使用 Force 参数将对象的内部成员和编译器生成的成员添加到显示中。 可以采用与使用对象的改编方法相同的方式使用这些属性和方法。 第二个命令演示如何显示计划服务的 PSBase 属性的值。 有关内部成员的详细信息,请参阅 about_Intrinsic_Members

示例 3:获取服务对象的扩展成员

此示例获取使用 Types.ps1xml 文件或 Add-Member cmdlet 扩展的服务对象的方法和属性。

PowerShell
Get-Service | Get-Member -View Extended

TypeName: System.Service.ServiceController#StartupType

Name             MemberType    Definition
----             ----------    ----------
Name             AliasProperty Name = ServiceName
RequiredServices AliasProperty RequiredServices = ServicesDependedOn
ToString         ScriptMethod  System.Object ToString();

Get-Member 命令使用 View 参数仅获取服务对象的扩展成员。 在这种情况下,扩展成员是 Name 属性,该属性是 ServiceName 属性的别名属性。

示例 4:获取事件日志对象的脚本属性

此示例获取事件查看器中系统日志中的事件日志对象的脚本属性。

PowerShell
Get-WinEvent -LogName System -MaxEvents 1 | Get-Member -MemberType NoteProperty

TypeName: System.Diagnostics.Eventing.Reader.EventLogRecord

Name    MemberType   Definition
----    ----------   ----------
Message NoteProperty string Message=The machine-default permission settings do not grant Local ...

MemberType 参数仅获取其 MemberType 属性的值为 NoteProperty 的对象。

该命令返回 EventLogRecord 对象的 Message 属性。

示例 5:获取具有指定属性的对象

此示例获取 cmdlet 列表中具有 MachineName 属性的对象。

$list 变量包含要计算的 cmdlet 列表。 foreach 语句调用每个命令并将结果发送到 Get-MemberName 参数将 Get-Member 的结果限制为名称 MachineName的成员。

PowerShell
$list = "Get-Process", "Get-Service", "Get-Culture", "Get-PSDrive", "Get-ExecutionPolicy"
foreach ($cmdlet in $list) {& $cmdlet | Get-Member -Name MachineName}

TypeName: System.Diagnostics.Process

Name        MemberType Definition
----        ---------- ----------
MachineName Property   string MachineName {get;}

   TypeName: System.Service.ServiceController#StartupType

Name        MemberType Definition
----        ---------- ----------
MachineName Property   string MachineName {get;set;}

结果显示,只有进程对象和服务对象具有 MachineName 属性。

示例 6:获取数组的成员

此示例演示如何查找对象数组的成员。 通过管道和对象数组 Get-Member时,cmdlet 将返回数组中每个唯一对象类型的成员列表。 如果使用 InputObject 参数传递数组,则数组将被视为单个对象。

PowerShell
$array = @(1,'hello')
$array | Get-Member

TypeName: System.Int32

Name        MemberType Definition
----        ---------- ----------
CompareTo   Method     int CompareTo(System.Object value), int CompareTo(int value), int ICompar...
Equals      Method     bool Equals(System.Object obj), bool Equals(int obj), bool IEquatable[int...
GetHashCode Method     int GetHashCode()
GetType     Method     type GetType()
GetTypeCode Method     System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()
ToBoolean   Method     bool IConvertible.ToBoolean(System.IFormatProvider provider)
ToByte      Method     byte IConvertible.ToByte(System.IFormatProvider provider)
...

   TypeName: System.String

Name                 MemberType            Definition
----                 ----------            ----------
Clone                Method                System.Object Clone(), System.Object ICloneable.Clone()
CompareTo            Method                int CompareTo(System.Object value), int CompareTo(str...
Contains             Method                bool Contains(string value), bool Contains(string val...
CopyTo               Method                void CopyTo(int sourceIndex, char[] destination, int ...
EndsWith             Method                bool EndsWith(string value), bool EndsWith(string val...
EnumerateRunes       Method                System.Text.StringRuneEnumerator EnumerateRunes()
Equals               Method                bool Equals(System.Object obj), bool Equals(string va...
GetEnumerator        Method                System.CharEnumerator GetEnumerator(), System.Collect...
GetHashCode          Method                int GetHashCode(), int GetHashCode(System.StringCompa...
...

Get-Member -InputObject $array

TypeName: System.Object[]

Name           MemberType            Definition
----           ----------            ----------
Add            Method                int IList.Add(System.Object value)
Address        Method                System.Object&, System.Private.CoreLib, Version=4.0.0.0, Cu...
Clear          Method                void IList.Clear()
Clone          Method                System.Object Clone(), System.Object ICloneable.Clone()
CompareTo      Method                int IStructuralComparable.CompareTo(System.Object other, Sy...
...

$array 变量包含一个 Int32 对象和一个 字符串 对象,如数组通过管道传递给 Get-Member时所示。 使用 InputObject 参数传递 $array 时,Get-Member 返回 Object[] 类型的成员。

示例 7:确定可以设置的对象属性

此示例演示如何确定可以更改对象的哪些属性。

PowerShell
$File = Get-Item c:\test\textFile.txt
$File.PSObject.Properties | Where-Object isSettable | Select-Object -Property Name

Name
----
PSPath
PSParentPath
PSChildName
PSDrive
PSProvider
PSIsContainer
IsReadOnly
CreationTime
CreationTimeUtc
LastAccessTime
LastAccessTimeUtc
LastWriteTime
LastWriteTimeUtc
Attributes

示例 8:按对象创建的顺序列出对象的属性

此示例创建一个新的 PSObject,并向其中添加属性。 Get-Member 按字母顺序列出属性。 若要查看属性添加到对象的顺序,必须使用 PSObject 内部成员。

PowerShell
$Asset = New-Object -TypeName PSObject
$d = [ordered]@{Name="Server30";System="Server Core";PSVersion="4.0"}
$Asset | Add-Member -NotePropertyMembers $d -TypeName Asset
$Asset.PSObject.Properties | Select-Object Name, Value

Name      Value
----      -----
Name      Server30
System    Server Core
PSVersion 4.0

参数

-Force

将内部成员和编译器生成的 get_set_ 方法添加到显示中。 以下列表描述了使用 Force 参数时添加的属性:

  • PSBase:不带扩展或适应的 .NET 对象的原始属性。 这些是为对象类定义的属性。
  • PSAdapted:PowerShell 扩展类型系统中定义的属性和方法。
  • PSExtended:在 Types.ps1xml 文件中或使用 Add-Member cmdlet 添加的属性和方法。
  • PSObject:将基对象转换为 PowerShell PSObject 对象的适配器。
  • PSTypeNames:描述对象的对象类型列表,具体顺序。 设置对象格式时,PowerShell 会在 PowerShell 安装目录($PSHOME)中搜索 Format.ps1xml 文件中的类型。 它为找到的第一个类型使用格式定义。

默认情况下,Get-Member 在所有视图中获取这些属性,基本调整,但不显示它们。

类型:SwitchParameter
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-InputObject

指定检索其成员的对象。

使用 InputObject 参数与管道对象 Get-Member不同。 区别如下:

  • 通过管道将对象集合传递给 Get-Member时,Get-Member 获取集合中各个对象的成员,例如字符串数组中每个字符串的属性。
  • 使用 InputObject 提交对象集合时,Get-Member 获取集合的成员,例如字符串数组中的数组的属性。
类型:PSObject
Position:Named
默认值:None
必需:False
接受管道输入:True
接受通配符:False

-MemberType

指定此 cmdlet 获取的成员类型。 默认值为 All

此参数的可接受值为:

  • AliasProperty
  • CodeProperty
  • Property
  • NoteProperty
  • ScriptProperty
  • Properties
  • PropertySet
  • Method
  • CodeMethod
  • ScriptMethod
  • Methods
  • ParameterizedProperty
  • MemberSet
  • Event
  • Dynamic
  • All

这些值定义为基于标志的枚举。 可以使用此参数将多个值组合在一起以设置多个标志。 可以将值作为值数组或这些值的逗号分隔字符串传递给 MemberType 参数。 该 cmdlet 将使用二进制 OR作合并这些值。 将值作为数组传递是最简单的选项,还允许对值使用 Tab 补全。

有关这些值的信息,请参阅 PSMemberTypes 枚举

并非所有对象都具有每种类型的成员。 如果指定对象没有的成员类型,PowerShell 将返回 null 值。 若要获取相关类型的成员(如所有扩展成员),请使用 View 参数。 如果将 MemberType 参数与 StaticView 参数一起使用,Get-Member 获取属于这两个集的成员。

类型:PSMemberTypes
别名:Type
接受的值:AliasProperty, CodeProperty, Property, NoteProperty, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet, Event, Dynamic, All
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Name

指定对象的一个或多个属性或方法的名称。 Get-Member 仅获取指定的属性和方法。

如果将 Name 参数与 MemberTypeViewStatic 参数一起使用,Get-Member 仅获取满足所有参数条件的成员。

若要按名称获取静态成员,请使用具有 Name 参数的 Static 参数。

类型:String[]
Position:0
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Static

指示此 cmdlet 仅获取对象的静态属性和方法。 静态属性和方法在对象的类上定义,而不是在类的任何特定实例上定义。

如果将 Static 参数与 ViewForce 参数一起使用,cmdlet 将忽略这些参数。 如果将 Static 参数与 MemberType 参数一起使用,Get-Member 仅获取属于这两个集的成员。

类型:SwitchParameter
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-View

指定此 cmdlet 仅获取特定类型属性和方法。 指定一个或多个值。 默认值为 改编扩展

此参数的可接受值为:

  • 基础。 仅获取 .NET 对象的原始属性和方法(没有扩展或适应)。
  • 适应。 仅获取 PowerShell 扩展类型系统中定义的属性和方法。
  • 扩展。 仅获取在 Types.ps1xml 文件中添加的属性和方法,或使用 Add-Member cmdlet。
  • 都。 获取基视图、调整视图和扩展视图中的成员。

View 参数确定检索的成员,而不仅仅是显示这些成员。

若要获取特定成员类型(如脚本属性),请使用 MemberType 参数。 如果使用同一命令中的 MemberTypeView 参数,Get-Member 获取属于这两个集的成员。 如果在同一命令中使用 StaticView 参数,则忽略 View 参数。

类型:PSMemberViewTypes
接受的值:Extended, Adapted, Base, All
Position:Named
默认值:Adapted, Extended
必需:False
接受管道输入:False
接受通配符:False

输入

PSObject

可以通过管道将任何对象传递给此 cmdlet。

输出

MemberDefinition

此 cmdlet 返回其获取的每个属性或方法的 MemberDefinition

备注

PowerShell 包含以下 Get-Member别名:

  • 所有平台:
    • gm

可以使用 InputObject 参数或通过管道对象(以逗号开头)来 Get-Member获取有关集合对象的信息。

可以在定义新属性和方法值的脚本块中使用 $This 自动变量。 $This 变量是指要向其添加属性和方法的对象实例。 有关 $This 变量的详细信息,请参阅 about_Automatic_Variables

如果传递表示 类型的对象(如类型文本(如 [int]),Get-Member 返回有关 [System.RuntimeType] 类型的信息。 但是,使用 Static 参数时,Get-Member 返回由 System.RuntimeType 实例表示的特定类型的静态成员。