about_Properties
应用到: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0
主题
about_Properties
简短说明
介绍如何使用 Windows PowerShell 中的对象属性。
详细说明
Windows PowerShell 使用称为对象的结构化信息集合来表示数据存储中的项或计算机的状态。通常情况下,你使用属于 Microsoft .NET Framework 的对象,但你也可以在 Windows PowerShell 中创建自定义对象。
项与其对象之间的关联非常紧密。当你更改对象时,你通常会更改它所表示的项。例如,当你获取 Windows PowerShell 中的文件时,你不会获取实际文件。相反,你会获取表示该文件的 FileInfo 对象。当你更改 FileInfo 对象时,该文件也会更改。
大多数对象都具有属性。属性是与对象相关联的数据。不同类型的对象具有不同的属性。例如,表示文件的 FileInfo 对象具有包含 $True(如果该文件具有只读属性)和 $False(如果该文件不具有只读属性)的 IsReadOnly 属性。表示文件系统目录的 DirectoryInfo 对象具有包含父目录路径的 Parent 属性。
对象属性
若要获取对象的属性,请使用 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 中工作时,你可以访问对象的所有成员。
若要仅获取对象的属性而不获取方法,请使用值为“property”的 Get-Member cmdlet 的 MemberType 参数,如以下示例所示。
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 命令返回表示 PowerShell.exe 文件的 FileInfo 对象。该命令用括号括起来,以确保在访问任何属性之前执行它。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 开始,相同的命令返回 Get-service 所返回的每个服务的 DisplayName 属性值。
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