Get-Member

获取对象的属性和方法。

语法

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

说明

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

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

示例

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

PS> Get-Service | Get-Member
TypeName: System.ServiceProcess.ServiceController
Name                      MemberType    Definition
----                      ----------    ----------
Name                      AliasProperty Name = ServiceName
Close                     Method        System.Void Close()
Continue                  Method        System.Void Continue()
CreateObjRef              Method        System.Runtime.Remoting.ObjRef CreateObjRef(Type requestedType)
Dispose                   Method        System.Void Dispose()
Equals                    Method        System.Boolean Equals(Object obj)
ExecuteCommand            Method        System.Void ExecuteCommand(Int32 command)
GetHashCode               Method        System.Int32 GetHashCode()
GetLifetimeService        Method        System.Object GetLifetimeService()
GetType                   Method        System.Type GetType()
InitializeLifetimeService Method        System.Object InitializeLifetimeService()
Pause                     Method        System.Void Pause()
Refresh                   Method        System.Void Refresh()
Start                     Method        System.Void Start(), System.Void Start(String[] args)
Stop                      Method        System.Void Stop()
ToString                  Method        System.String ToString()
WaitForStatus             Method        System.Void WaitForStatus(ServiceControllerStatus desiredStatus), System.Voi...
CanPauseAndContinue       Property      System.Boolean CanPauseAndContinue {get;}
CanShutdown               Property      System.Boolean CanShutdown {get;}
CanStop                   Property      System.Boolean CanStop {get;}
Container                 Property      System.ComponentModel.IContainer Container {get;}
DependentServices         Property      System.ServiceProcess.ServiceController[] DependentServices {get;}
DisplayName               Property      System.String DisplayName {get;set;}
MachineName               Property      System.String MachineName {get;set;}
ServiceHandle             Property      System.Runtime.InteropServices.SafeHandle ServiceHandle {get;}
ServiceName               Property      System.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;}
Status                    Property      System.ServiceProcess.ServiceControllerStatus Status {get;}

此命令显示 Get-Service cmdlet 生成的进程对象 (System.ServiceProcess.ServiceController) 的属性和方法。

命令使用管道运算符 (|) 将 Get-Service 命令的输出发送到 Get-Member

由于命令的 Get-Member 部分没有任何参数,因此它使用所有默认值。 因此,它获取所有成员类型,但不会获取静态成员,并且不会显示内部成员。

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

PS> Get-Service | Get-Member -Force
PS> (Get-Service Schedule).PSBase

此示例获取由 Get-Service 检索到的服务对象 (System.ServiceProcess.ServiceController) 的所有成员(属性和方法),包括内部成员,例如 PSBase 和 PSObject,以及 get_ 和 set_ methods。

第一个命令使用 Get-Service cmdlet 获取表示系统上服务的对象。 它使用管道运算符 (|) 将服务对象传递给 Get-Member cmdlet。

Get-Member 命令使用 Force 参数将对象的内部成员和编译器生成的成员添加到显示中。 Get-Member 获取这些成员,但默认情况下会隐藏这些成员。

你可以以与使用对象的改写方法相同的方式使用这些属性和方法。 第二个命令显示如何显示 Schedule 服务的 PSBase 属性的值。

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

PS> Get-Service| Get-Member -View Extended
TypeName: System.ServiceProcess.ServiceController
Name MemberType    Definition
---- ----------    ----------
Name AliasProperty Name = ServiceName

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

Get-Member 命令使用 View 参数仅获取服务对象的扩展成员。 在本例中,扩展成员是 Name 属性,它是 ServiceName 属性的别名属性。

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

PS> Get-EventLog -Log System | Get-Member -MemberType ScriptProperty
TypeName: System.Diagnostics.EventLogEntry
Name    MemberType     Definition
----    ----------     ----------
EventID ScriptProperty System.Object EventID {get=$this.get_EventID() -band 0xFFFF;}

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

该命令使用 MemberType 参数仅获取其 MemberType 属性值为 ScriptProperty 的对象。

命令返回 EventLog 对象的 EventID 属性。

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

PS> $A = "Get-Process", "Get-Service", "Get-Culture", "Get-PSDrive", "Get-ExecutionPolicy"
PS> ForEach ($Cmdlet in $A) {Invoke-Command $Cmdlet | Get-Member -Name MachineName}
TypeName: System.Diagnostics.Process
Name        MemberType Definition
----        ---------- ----------
MachineName Property   System.String MachineName {get;}
TypeName: System.ServiceProcess.ServiceController
Name        MemberType Definition
----        ---------- ----------
MachineName Property   System.String MachineName {get;set;}

此命令从 cmdlet 列表中获取具有 MachineName 属性的对象。

第一个命令将多个 cmdlet 的名称存储在 $A 变量中。

第二个命令使用 ForEach 语句调用每个命令,将结果发送到 Get-Member,并将 Get-Member 的结果限制为名为 MachineName 的成员。

结果显示,只有 system.Diagnostics.Process) (处理对象, (System.ServiceProcess.ServiceController) 的服务对象具有 MachineName 属性。

示例 6:获取数组的成员

PS> $A = @(1)
PS> $A.Count
1
PS> Get-Member -InputObject $A
TypeName: System.Object[]
Name               MemberType    Definition
----               ----------    ----------
Count              AliasProperty Count = Length
Address            Method        System.Object& Address(Int32 )
Clone              Method        System.Object Clone()
...
PS> $A = @(1,2,3)
PS> Get-Member -InputObject $A
TypeName: System.Object[]
Name               MemberType    Definition
----               ----------    ----------
Count              AliasProperty Count = Length
Address            Method        System.Object& Address(Int32 )
Clone              Method        System.Object Clone()
...
PS> $A.Count
3

此示例演示当你只有特定类型的一个对象时,如何查找对象数组的属性和方法。

由于命令的目标是查找数组的属性,因此第一个命令使用 InputObject 参数。 它使用 at 符号 (@) 来指示数组。 在本例中,数组只包含一个对象,即整数 1。

第三个命令使用 Get-Member cmdlet 获取整数数组的属性和方法,该命令将它们保存在 $A 变量中。

第四个命令使用数组的 Count 属性查找$A变量中的对象数。

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

PS> $File = Get-Item c:\test\textFile.txt
PS> $File.psobject.properties | Where-Object {$_.issettable} | Format-Table -Property name
Name
----
PSPath
PSParentPath
PSChildName
PSDrive
PSProvider
PSIsContainer
IsReadOnly
CreationTime
CreationTimeUtc
LastAccessTime
LastAccessTimeUtc
LastWriteTime
LastWriteTimeUtc
Attributes
PS> [appdomain]::CurrentDomain.GetAssemblies() | ForEach-Object { $_.getexportedtypes() } | ForEach-Object {$_.getproperties() | Where-Object {$_.canwrite }} | Select-Object reflectedtype, name

此示例演示如何确定对象的哪个属性可更改。 该示例使用一个文件,但是你可以使用此命令格式查找 Windows PowerShell 中的任何对象的可更改属性。

第一个命令使用 Get-Item cmdlet 获取文本文件,然后将文件对象保存在 $File 变量中。

第二个命令获取$File变量中文件对象的所有可更改属性,并在表中显示属性的名称。

第三个命令获取你的 Windows PowerShell 会话中所有对象的可更改属性。

示例 8:获取集合中每个项的成员

PS> $S = Get-Service
PS> $S | Get-Member
TypeName: System.ServiceProcess.ServiceController
Name                      MemberType    Definition
----                      ----------    ----------
Name                      AliasProperty Name = ServiceName
RequiredServices          AliasProperty RequiredServices = ServicesDependedOn
Disposed                  Event         System.EventHandler Disposed(System.Object, System.EventArgs
Close                     Method        System.Void Close()
Continue                  Method        System.Void Continue()
CreateObjRef              Method        System.Runtime.Remoting.ObjRef CreateObjRef(type requestedTy
Dispose                   Method        System.Void Dispose()
...
PS> Get-Member -InputObject $S
TypeName: System.Object[]
Name           MemberType    Definition
----           ----------    ----------
Count          AliasProperty Count = Length
Address        Method        System.Object&, mscorlib, Version=2.0.0.0, Cultu
Clone          Method        System.Object Clone()
CopyTo         Method        System.Void CopyTo(array array, int index), Syst
Equals         Method        bool Equals(System.Object obj)
Get            Method        System.Object Get(int )
GetEnumerator  Method        System.Collections.IEnumerator GetEnumerator()
GetHashCode    Method        int GetHashCode()
...

此示例演示 InputObject 参数在 Get-Member cmdlet 中的工作原理。 使用 InputObject 参数获取集合的成员时, Get-Member 获取集合的成员。 通过管道将对象的集合传递给 Get-Member 时, Get-Member 获取集合中每个项的成员。

第一个命令获取本地计算机上的服务,并将服务保存在 $S 变量中。

第二个命令通过管道将$S变量传递给 Get-Member cmdlet。 Get-Member 获取$S的每个成员的类型以及该类型的成员。 在本例中,它获取 ServiceController 对象并列出成员,例如 RequiredServices 和 Close。

第三个命令使用 Get-MemberInputObject 参数提交$S变量。 Get-Member 获取 System.Object[]) 类型 (,以及 ServiceController 对象(如 Count 和 Clone) (或数组) 的成员。

参数

-Force

将内部成员(PSBase、PSAdapted、PSObject 和 PSTypeNames)和编译器生成的 get_ 和 set_ 方法添加到显示中。 默认情况下, Get-Member 在除 Base 和 Adapted 之外的所有视图中获取这些属性,但它不会显示它们。

以下列表描述了使用 Force 参数时添加的属性:

  • PSBase:没有扩展或适应的 .NET Framework 对象的原始属性。 这些属性是为对象类定义的属性,并且在 MSDN 中列出。
  • PSAdapted。 Windows PowerShell 扩展类型系统中定义的属性和方法。
  • PSExtended。 在 Types.ps1xml 文件中或通过使用 Add-Member cmdlet 添加的属性和方法。
  • PSObject。 将基对象转换为 Windows PowerShell PSObject 对象的适配器。
  • PSTypeNames。 描述该对象的对象类型列表,以特异性排序。 当设置对象的格式时,Windows PowerShell 将在 Windows PowerShell 安装目录中 ($pshome) 中的 Format.ps1xml 文件中搜索类型。 它使用它找到的第一个类型的格式设置定义。
Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

指定要检索其成员的对象。

使用 InputObject 参数与通过管道将对象传递给 Get-Member 不同。 不同之处如下:

  • 通过管道将对象的集合传递给 Get-Member 时, Get-Member 获取集合中各个对象的成员,例如字符串数组中每个字符串的属性。
  • 使用 InputObject 提交对象的集合时, Get-Member 获取集合的成员,例如字符串数组中数组的属性。
Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-MemberType

指定此 cmdlet 获取的成员类型。 默认值为“所有”。

此参数的可接受值为:

  • AliasProperty
  • CodeProperty
  • 属性
  • NoteProperty
  • ScriptProperty
  • 属性
  • PropertySet
  • 方法
  • CodeMethod
  • ScriptMethod
  • 方法
  • ParameterizedProperty
  • MemberSet
  • 事件
  • 动态
  • 全部

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

并非所有对象都具有每种类型的成员。 如果指定对象所不具有的成员类型,则 Windows PowerShell 将返回 null 值。

若要获取成员的相关类型,例如所有扩展成员,请使用 View 参数。 如果将 MemberType 参数与 StaticView 参数一起使用, Get-Member 将获取属于这两个集的成员。

Type:PSMemberTypes
Aliases:Type
Accepted values:AliasProperty, CodeProperty, Property, NoteProperty, ScriptProperty, Properties, PropertySet, Method, CodeMethod, ScriptMethod, Methods, ParameterizedProperty, MemberSet, Event, Dynamic, All
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Name

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

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

若要按名称获取静态成员,请将 Static 参数与 Name 参数一起使用。

Type:String[]
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Static

指示此 cmdlet 仅获取对象的静态属性和方法。

在对象的类上定义的静态属性和方法,而不是在类的任何特定实例上。

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

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-View

指定此 cmdlet 仅获取特定类型属性和方法。 指定一个或多个值。 默认值为 Adapted、Extended。

有效值为:

  • Base。 仅获取 .NET Framework 对象的原始属性和方法(不带有扩展或改写)。
  • 适应。 仅获取 Windows PowerShell 扩展类型系统中定义的属性和方法。
  • 扩展。 仅获取在 Types.ps1xml 文件中或通过使用 Add-Member cmdlet 添加的属性和方法。
  • 全部。 在基本、改写和扩展视图中获取成员。

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

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

Type:PSMemberViewTypes
Accepted values:Extended, Adapted, Base, All
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

PSObject

可以通过管道将任何对象传递给 Get-Member

输出

MemberDefinition

Get-Member 为其获取的每个属性或方法返回一个 对象。

备注

  • 可以使用 InputObject 参数或通过将对象(前面带有逗号)管道传递给 Get-Member 来获取有关集合对象的信息。

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