about_Properties
適用於: Windows PowerShell 2.0, Windows PowerShell 3.0
主題
about_Properties
簡短描述
描述如何使用 Windows PowerShell 中的物件屬性。
詳細描述
Windows PowerShell 使用稱為物件的資訊結構化集合,來代表資料存放區或是電腦狀態中的項目。通常您可使用屬於 Microsoft.NET Framework 的物件,但也可以在 Windows PowerShell 建立自訂物件。
項目和其物件之間的關聯非常密切。當您變更物件時,通常會變更它所代表的項目。例如,當您取得 Windows PowerShell 中的檔案時,您不會取得實際的檔案。相反地,您會取得 FileInfo 物件,表示該檔案。當您變更 FileInfo 物件時,該檔案會隨之變更。
大部分的物件具有屬性。屬性是與物件相關聯的資料。不同類型的物件有不同的屬性。例如代表檔案的 FileInfo 物件具有 IsReadOnly 屬性,如果該檔案包含唯讀屬性,則包含 $True,反之則為 $False。代表檔案系統目錄的 DirectoryInfo 物件有包含上層目錄路徑的父屬性。
物件屬性
若要取得物件的屬性,請使用 Get-Member Cmdlet。例如,若要取得 FileInfo 物件的屬性,請使用 Get-Childitem Cmdlet 取得代表檔案的 FileInfo 物件。然後,使用管線運算子 (|) 將 FileInfo 物件傳送給 Get-Member。下列命令會取得 PowerShell.exe 檔案,並將其傳送給 Get-Member。$Pshome 自動變數包含 Windows PowerShell 安裝目錄的路徑。
Get-ChildItem $pshome\PowerShell.exe | Get-Member
該命令的輸出會列出 FileInfo 物件的成員。成員包括屬性和方法。當您使用 Windows PowerShell 時,您可存取此物件的所有成員。
若要只取得物件屬性,而非方法的屬性,請使用 Get-Member Cmdlet 的 MemberType 參數,其 "property" 的值如下列範例所示。
Get-ChildItem $pshome\PowerShell.exe | Get-Member -MemberType property
TypeName: System.IO.FileInfo
Name MemberType Definition
---- ---------- ----------
Attributes Property System.IO.FileAttributes Attributes {get;set;}
CreationTime Property System.DateTime CreationTime {get;set;}
CreationTimeUtc Property System.DateTime CreationTimeUtc {get;set;}
Directory Property System.IO.DirectoryInfo Directory {get;}
DirectoryName Property System.String DirectoryName {get;}
Exists Property System.Boolean Exists {get;}
Extension Property System.String Extension {get;}
FullName Property System.String FullName {get;}
IsReadOnly Property System.Boolean IsReadOnly {get;set;}
LastAccessTime Property System.DateTime LastAccessTime {get;set;}
LastAccessTimeUtc Property System.DateTime LastAccessTimeUtc {get;set;}
LastWriteTime Property System.DateTime LastWriteTime {get;set;}
LastWriteTimeUtc Property System.DateTime LastWriteTimeUtc {get;set;}
Length Property System.Int64 Length {get;}
Name Property System.String Name {get;}
尋找屬性之後,您可以使用 Windows PowerShell 中的命令。
屬性值
雖然特定類型的每個物件都有相同的屬性,但這些屬性的值會描述特定的物件。例如,每個 FileInfo 物件都有 CreationTime 屬性,但該屬性的值隨每個檔案而不同。
取得物件屬性值最常見的方式為使用點方法。輸入對該物件的參考,例如包含該物件的變數,或取得該物件的命令。然後在屬性名稱後面輸入點 (.)。
例如,下列命令會顯示 PowerShell.exe 檔案的 CreationTime 屬性值。Get-Childitem 命令會傳回 FileInfo 物件,其代表 PowerShell.exe 檔案。該命令會以括弧括住,以確定它會在存取任何屬性之前執行。Get-Childitem 命令後面有一個點和 CreationTime 屬性名稱,如下所示:
C:\PS> (Get-ChildItem $pshome\PowerShell.exe).creationtime
Tuesday, March 18, 2008 12:07:52 AM
您也可將物件儲存在變數中,然後取得其屬性,方法是使用點方法,如下列範例所示:
C:\PS> $a = Get-ChildItem $pshome\PowerShell.exe
C:\PS> $a.CreationTime
Tuesday, March 18, 2008 12:07:52 AM
您也可以使用 Select-Object 和 Format-List Cmdlet 以顯示物件的屬性值。Select-Object 與 Format-List 都有 Property 參數。Property 參數可用來指定一或多個屬性及其值。或者,您可以使用萬用字元 (*) 來代表所有屬性。
例如,下列命令會顯示 PowerShell.exe 檔案的所有屬性值。
C:\PS> Get-ChildItem $pshome\PowerShell.exe | Format-List -property *
PSPath : Microsoft.PowerShell.Core\FileSystem::C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe
PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\Windows\system32\WindowsPowerShell\v1.0
PSChildName : PowerShell.exe
PSDrive : C
PSProvider : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
VersionInfo : File: C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe
InternalName: POWERSHELL
OriginalFilename: PowerShell.EXE.MUI
File Version: 6.1.6570.1 (fbl_srv_PowerShell(nigels).070711-0102)
FileDescription: PowerShell.EXE
Product: Microsoft® Windows® Operating System
ProductVersion: 6.1.6570.1
Debug: False
Patched: False
PreRelease: False
PrivateBuild: True
SpecialBuild: False
Language: English (United States)
BaseName : PowerShell
Mode : -a---
Name : PowerShell.exe
Length : 160256
DirectoryName : C:\Windows\system32\WindowsPowerShell\v1.0
Directory : C:\Windows\system32\WindowsPowerShell\v1.0
IsReadOnly : False
Exists : True
FullName : C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe
Extension : .exe
CreationTime : 3/18/2008 12:07:52 AM
CreationTimeUtc : 3/18/2008 7:07:52 AM
LastAccessTime : 3/19/2008 8:13:58 AM
LastAccessTimeUtc : 3/19/2008 3:13:58 PM
LastWriteTime : 3/18/2008 12:07:52 AM
LastWriteTimeUtc : 3/18/2008 7:07:52 AM
Attributes : Archive
靜態屬性
您可以使用 Windows PowerShell 中 .NET 類別的靜態屬性。靜態屬性為類別屬性,不像屬於物件屬性的標準屬性。
若要取得類別的靜態屬性,請使用 Get-Member Cmdlet 的 Static 參數。
例如,下列命令會取得 System.DateTime 類別的靜態屬性。
Get-Date | Get-Member -MemberType Property -Static
TypeName: System.DateTime
Name MemberType Definition
---- ---------- ----------
MaxValue Property static datetime MaxValue {get;}
MinValue Property static datetime MinValue {get;}
Now Property datetime Now {get;}
Today Property datetime Today {get;}
UtcNow Property datetime UtcNow {get;}
若要取得靜態屬性的值,請使用下列語法。
[<ClassName>]::<Property>
例如,下列命令會取得 System.DateTime 類別 UtcNow 靜態屬性的值。
[System.DateTime]::UtcNow
純量物件和集合的屬性
特定類型的一個 (「純量」) 物件屬性通常和相同類型物件集合的屬性不同。
例如,每項服務都有 DisplayName 屬性,但服務的集合並沒有 DisplayName 屬性。同樣地,所有集合都具有 Count 屬性,可告知該集合中有多少物件,但個別物件並沒有 Count 屬性。
從 Windows PowerShell 3.0 開始,Windows PowerShell 會嘗試防止純量物件和集合屬性不同所導致的指令碼錯誤。
-- 如果您送出一個集合,但是要求只存在於單一 (「純量」) 物件的屬性,則 Windows PowerShell 會傳回此集合中每個物件的該屬性值。
-- 如果您要求無物件或一個物件的 Count 或 Length 屬性,則 Windows PowerShell 會傳回正確的值。
如果此屬性存在於個別物件和該集合上,則 Windows PowerShell 不會改變此結果。
這項功能也適用於純量物件和集合的方法。如需詳細資訊,請參閱 about_Methods。
範例
例如,每項服務都有 DisplayName 屬性。下列命令會取得 Audiosrv 服務的 DisplayName 屬性值。
PS C:\>(Get-Service Audiosrv).DisplayName
Windows Audio
不過,服務的集合或陣列並沒有 DisplayName。下列命令會嘗試取得 Windows PowerShell 2.0 中所有服務的 DisplayName 屬性。
PS C:\>(Get-Service).DisplayName
PS C:\>
從 Windows PowerShell 3.0 開始,相同命令所傳回的 DisplayName 屬性值為 Get-Service 傳回每項服務的屬性值。
PS C:\>(Get-Service).DisplayName
Application Experience
Application Layer Gateway Service
Windows All-User Install Agent
Application Identity
Application Information
...
相反地,兩項或多項服務的集合有 Count 屬性,包含集合中的物件數目。
PS C:\>(Get-Service).Count
176
個別服務沒有 Count 或 Length 屬性,如 Windows PowerShell 2.0 中的這個命令所示。
PS C:\>(Get-Service Audiosrv).Count
PS C:\>
從 Windows PowerShell 3.0 開始,此命令會傳回正確的 Count 值。
PS C:\>(Get-Service Audiosrv).Count
1
另請參閱
about_Methods
about_Objects
Get-Member
Select-Object
Format-List