about_Properties
簡短描述
描述如何在PowerShell中使用物件屬性。
詳細描述
PowerShell 會使用稱為 對象的結構化資訊集合來表示數據存放區或計算機狀態中的專案。 一般而言,您可以使用屬於Microsoft .NET Framework 一部分的物件,但您也可以在PowerShell中建立自定義物件。
專案與其對象之間的關聯非常接近。 當您變更物件時,通常會變更它所代表的專案。 例如,當您在PowerShell中取得檔案時,不會取得實際的檔案。 相反地,您會取得 代表檔案的 FileInfo 物件。 當您變更 FileInfo 物件時,檔案也會變更。
大部分的物件都有屬性。 屬性是與 對象相關聯的數據。 不同類型的物件有不同的屬性。 例如,代表檔案的 FileInfo 物件具有 IsReadOnly 屬性,如果檔案具有唯讀屬性,如果$False
檔案沒有,則為 $True
。 代表文件系統目錄的 DirectoryInfo 物件具有 Parent 屬性,其中包含父目錄的路徑。
物件屬性
若要取得對象的屬性,請使用 Get-Member
Cmdlet。 例如,若要取得 FileInfo 物件的屬性,請使用 Get-ChildItem
Cmdlet 來取得代表檔案的 FileInfo 物件。 然後,使用管線運算子 (|
) 將 FileInfo 物件傳送至 Get-Member
。 下列命令會取得檔案, powershell.exe
並將它傳送至 Get-Member
。 自動 $PSHOME
變數包含 PowerShell 安裝目錄的路徑。
Get-ChildItem $PSHOME\powershell.exe | Get-Member
命令的輸出會列出 FileInfo 物件的成員。 成員同時包含屬性和方法。 當您在 PowerShell 中工作時,您可以存取物件的所有成員。
若要只取得對象的屬性,而不是方法,請使用 Cmdlet 的 Get-Member
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;}
找到屬性之後,您可以在 PowerShell 命令中使用它們。
屬性值
雖然特定類型的每個物件都有相同的屬性,但這些屬性的值會描述特定物件。 例如,每個 FileInfo 物件都有 CreationTime 屬性,但該屬性的值會因每個檔案而有所不同。
取得物件屬性值的最常見方式是使用成員存取運算符 (.
)。 輸入 對象的參考,例如包含 物件的變數,或取得 物件的命令。 然後,輸入運算子 (.
) 後面接著屬性名稱。
例如,下列命令會顯示 檔案的 CreationTime 屬性值 powershell.exe
。 此命令Get-ChildItem
會傳回代表的 powershell.exe file
FileInfo 物件。 命令會以括弧括住,以確保它會在存取任何屬性之前執行。
(Get-ChildItem $PSHOME\powershell.exe).CreationTime
Saturday, June 5, 2021 7:07:00 AM
您也可以將物件儲存在變數中,然後使用成員 access (.
) 方法來取得其屬性,如下列範例所示:
$a = Get-ChildItem $PSHOME\powershell.exe
$a.CreationTime
Saturday, June 5, 2021 7:07:00 AM
您也可以使用 Select-Object
和 Format-List
Cmdlet 來顯示 物件的屬性值。 Select-Object
和 Format-List
各有 Property 參數。 您可以使用 Property 參數來指定一或多個屬性及其值。 或者,您可以使用通配符 (*
) 來代表所有屬性。
例如,下列命令會顯示檔案所有屬性 powershell.exe
的值。
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
Mode : -a----
VersionInfo : File: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
InternalName: POWERSHELL
OriginalFilename: PowerShell.EXE.MUI
FileVersion: 10.0.22000.1 (WinBuild.160101.0800)
FileDescription: Windows PowerShell
Product: Microsoft? Windows? Operating System
ProductVersion: 10.0.22000.1
Debug: False
Patched: False
PreRelease: False
PrivateBuild: False
SpecialBuild: False
Language: English (United States)
BaseName : powershell
Target : {C:\Windows\WinSxS\amd64_microsoft-windows-powershell-exe_31bf3856ad364e35_10.0.22000.1_none_bf599c
5a06fbb6f4\powershell.exe}
LinkType : HardLink
Name : powershell.exe
Length : 450560
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 : 6/5/2021 7:07:00 AM
CreationTimeUtc : 6/5/2021 12:07:00 PM
LastAccessTime : 7/18/2022 12:16:17 PM
LastAccessTimeUtc : 7/18/2022 5:16:17 PM
LastWriteTime : 6/5/2021 7:07:00 AM
LastWriteTimeUtc : 6/5/2021 12:07:00 PM
Attributes : Archive
靜態屬性
您可以在 PowerShell 中使用 .NET 類別的靜態屬性。 靜態屬性是 類別的屬性,不同於標準屬性,這些屬性是 對象的屬性。
若要取得類別的靜態屬性,請使用 Cmdlet 的 Get-Member
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
成員存取列舉
從 PowerShell 3.0 開始,當您使用成員存取運算子 (.
) 來存取清單集合上不存在的屬性時,PowerShell 會自動列舉集合中的專案,並傳回每個專案上的 屬性值。 如需詳細資訊,請參閱 about_Member-Access_Enumeration。
範例
此命令會傳回每個傳回之服務的 Get-Service
DisplayName 屬性值。
(Get-Service).DisplayName
Application Experience
Application Layer Gateway Service
Windows All-User Install Agent
Application Identity
Application Information
...
所有集合都有 Count 屬性,可傳回集合中的物件數目。
(Get-Service).Count
176
從 PowerShell 3.0 開始,您可以取得 非集合之單一物件的 Count 或 Length 屬性。
(Get-Service Audiosrv).Count
1
不過,某些物件具有 Length 屬性。 例如, 字串的 Length 是字串中的字元數。 Count 屬性是 對象的實例數目。
PS> $str = 'string'
PS> $str.Length
6
PS> $str.Count
1
如果個別物件和集合上有屬性,則只會傳回集合的屬性。
$collection = @(
[pscustomobject]@{length = "foo"}
[pscustomobject]@{length = "bar"}
)
# PowerShell returns the collection's Length.
$collection.length
2