Get-Member
获取对象的属性和方法。
语法
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
不会获取静态成员或内部成员。
Get-Service | 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 void Close()
Continue Method void Continue()
CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType)
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...
CanPauseAndContinue Property bool CanPauseAndContinue {get;}
CanShutdown Property bool CanShutdown {get;}
CanStop Property bool CanStop {get;}
Container Property System.ComponentModel.IContainer Container {get;}
DependentServices Property System.ServiceProcess.ServiceController[] DependentServices {get;}
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;}
Status Property System.ServiceProcess.ServiceControllerStatus Status {get;}
ToString ScriptMethod System.Object ToString();
示例 2:获取服务对象的成员
此示例获取由 Get-Service
cmdlet 检索到的服务对象的所有成员(属性和方法),包括内部成员,例如 PSBase、PSObject,以及 get_ 和 set_ 方法。
Get-Service | Get-Member -Force
(Get-Service Schedule).PSBase
Get-Member
命令使用 Force 参数将对象的内部成员和编译器生成的成员添加到显示中。 你可以以与使用对象的改写方法相同的方式使用这些属性和方法。 第二个命令显示如何显示 Schedule 服务的 PSBase 属性的值。 有关内部成员的详细信息,请参阅 about_Intrinsic_Members
示例 3:获取服务对象的扩展成员
此示例获取使用 Types.ps1xml
文件或 Add-Member
cmdlet 扩展的服务对象的方法和属性。
Get-Service | Get-Member -View Extended
TypeName: System.ServiceProcess.ServiceController
Name MemberType Definition
---- ---------- ----------
Name AliasProperty Name = ServiceName
RequiredServices AliasProperty RequiredServices = ServicesDependedOn
ToString ScriptMethod System.Object ToString();
Get-Member
命令使用 View 参数仅获取服务对象的扩展成员。 在本例中,扩展成员是 Name 属性,它是 ServiceName 属性的别名属性。
示例 4:获取事件日志对象的脚本属性
此示例获取事件查看器中系统日志中的事件日志对象的脚本属性。
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-Member
。 Name 参数将 Get-Member
的结果限制为名为 MachineName 的成员。
$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.ServiceProcess.ServiceController
Name MemberType Definition
---- ---------- ----------
MachineName Property string MachineName {get;set;}
结果显示仅进程对象和服务对象具有 MachineName 属性。
示例 6:获取数组的成员
此示例演示如何查找对象数组的成员。 通过管道将对象数组传递到 Get-Member
时,该 cmdlet 返回数组中每个唯一对象类型的成员列表。
如果使用 InputObject 参数传递数组,则将数组视为单个对象。
$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 对象和一个 string 对象,如通过管道将数组传递给 Get-Member
时所示。 使用 InputObject 参数传递 $array
时,Get-Member
返回 Object[] 类型的成员。
示例 7:确定可以设置的对象属性
此示例演示如何确定对象的哪个属性可更改。
$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 内部成员。
$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 将使用二进制或运算合并这些值。 将值作为数组传递是最简单的选项,此选项还支持对值使用 Tab 自动补全。
有关这些值的信息,请参阅 PSMemberTypes 枚举。
并非所有对象都具有每种类型的成员。 如果指定对象所不具有的成员类型,则 PowerShell 返回 null 值。 若要获取成员的相关类型,例如所有扩展成员,请使用 View 参数。 如果将 MemberType 参数与 Static 或 View 参数一起使用,则 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 参数与 MemberType、View 或 Static 参数一起使用,则 Get-Member
仅获取满足所有参数的条件的成员。
若要按名称获取静态成员,请将 Static 参数与 Name 参数一起使用。
类型: | String[] |
Position: | 0 |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-Static
指示此 cmdlet 仅获取该对象的静态属性和方法。 在对象的类上定义的静态属性和方法,而不是在类的任何特定实例上。
如果将 Static 参数用于 View 或 Force 参数,则 cmdlet 将忽略这些参数。 如果将 Static 参数与 MemberType 参数一起使用,Get-Member
仅获取同时属于这两个集的成员。
类型: | SwitchParameter |
Position: | Named |
默认值: | None |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
-View
指定此 cmdlet 仅获取特定类型属性和方法。 指定一个或多个值。 默认值为“Adapted”、“Extended”。
此参数的可接受值为:
- Base。 仅获取 .NET 对象的原始属性和方法(不带有扩展或改写)。
- Adapted。 仅获取 PowerShell 扩展类型系统中定义的属性和方法。
- Extended。 仅获取在
Types.ps1xml
文件中或通过使用Add-Member
cmdlet 添加的属性和方法。 - 全部。 在基本、改写和扩展视图中获取成员。
View 参数确定检索的成员,而不仅仅是这些成员的显示。
若要获取特定成员类型,例如脚本属性,请使用 MemberType 参数。 如果在同一个命令中使用 MemberType 和 View 参数,则 Get-Member
获取同时属于这两个集的成员。 如果在同一个命令中使用 Static 和 View 参数,则将忽略 View 参数。
类型: | PSMemberViewTypes |
接受的值: | Extended, Adapted, Base, All |
Position: | Named |
默认值: | Adapted, Extended |
必需: | False |
接受管道输入: | False |
接受通配符: | False |
输入
你可以通过管道将任何对象传递给此 cmdlet。
输出
此 cmdlet 为其获取的每个属性或方法返回一个 MemberDefinition。
备注
Windows PowerShell 包含 Get-Member
的以下别名:
gm
可以通过使用 InputObject 参数或通过使用管道将对象(前面加逗号)传递给 Get-Member
来获取有关集合对象的信息。
可以在定义新属性和方法的值的脚本块中使用 $This
自动变量。 $This
变量是指要向其中添加属性和方法的对象的实例。 有关 $This
变量的详细信息,请参阅 about_Automatic_Variables。
如果传递表示类型(例如 [int]
等类型文本)的对象,Get-Member
返回有关 [System.RuntimeType]
类型的信息。 但是,使用 Static 参数时,Get-Member
返回由 System.RuntimeType
实例表示的特定类型的静态成员。