共用方式為


Get-Member

取得物件的屬性和方法。

Syntax

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

Description

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 Cmdlet 所抓取之服務物件 (System.ServiceProcess.ServiceController) 的所有成員 (屬性和方法),包括內建成員 (例如 PSBase 和 PSObject) 和 get_ 和 set_ 方法。

第一個命令使用 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 PowerShellPSObject 物件的配接器。
  • 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 物件的原始屬性和方法 (未經擴充或調整)。
  • Adapted: 只取得在 Windows PowerShell 擴充類型系統中定義的屬性和方法。
  • Extended: 只取得在 Types.ps1xml 檔案中新增或藉由使用 Add-Member Cmdlet 來新增的屬性和方法。
  • 全部。 取得 Base、Adapted 及 Extended 檢視中的成員。

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。