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