about_Properties

Se aplica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

TEMA

about_Properties

DESCRIPCIÓN BREVE

Describe cómo usar propiedades de objetos en Windows PowerShell.

DESCRIPCIÓN LARGA

Windows PowerShell usa colecciones estructuradas de información, denominadas "objetos", para representar los elementos de los almacenes de datos o el estado del equipo. Normalmente, se trabaja con objetos que forman parte de Microsoft .NET Framework, pero también se pueden crear objetos personalizados en Windows PowerShell.

La asociación entre un elemento y su objeto es muy estrecha. Cuando se cambia un objeto, normalmente se cambia el elemento que representa. Por ejemplo, al obtener un archivo en Windows PowerShell, no se obtiene el archivo real. En su lugar, se obtiene un objeto FileInfo que representa el archivo. Cuando se cambia el objeto FileInfo, también se cambia el archivo.

La mayoría de los objetos tienen propiedades. Las propiedades son los datos que están asociados a un objeto. Los diferentes tipos de objeto tienen propiedades diferentes. Por ejemplo, un objeto FileInfo, que representa un archivo, tiene una propiedad IsReadOnly que contiene $True si el archivo tiene el atributo de solo lectura y $False si no lo tiene. Un objeto DirectoryInfo, que representa un directorio del sistema de archivos, tiene una propiedad Parent que contiene la ruta de acceso del directorio primario.

PROPIEDADES DEL OBJETO

Para obtener las propiedades de un objeto, use el cmdlet Get-Member. Por ejemplo, para obtener las propiedades de un objeto FileInfo, use el cmdlet Get-ChildItem para obtener el objeto FileInfo que representa un archivo. A continuación, use un operador de canalización (|) para enviar el objeto FileInfo a Get-Member. El comando siguiente obtiene el archivo PowerShell.exe y lo envía a Get-Member. La variable automática $Pshome contiene la ruta de acceso al directorio de instalación de Windows PowerShell.

         Get-ChildItem $pshome\PowerShell.exe | Get-Member

La salida del comando enumera los miembros del objeto FileInfo. Los miembros incluyen propiedades y métodos. Cuando se trabaja en Windows PowerShell, se tiene acceso a todos los miembros de los objetos.

Para obtener únicamente las propiedades de un objeto y no los métodos, use el parámetro MemberType del cmdlet Get-Member con un valor "property", tal como se muestra en el ejemplo siguiente.

         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;}

Después de encontrar las propiedades, puede usarlas en los comandos de Windows PowerShell.

VALORES DE PROPIEDAD

Aunque todos los objetos de un tipo específico tienen las mismas propiedades, los valores de estas propiedades describen el objeto en particular. Por ejemplo, cada objeto FileInfo tiene una propiedad CreationTime, pero el valor de la propiedad es diferente para cada archivo.

La forma más habitual de obtener los valores de las propiedades de un objeto consiste en usar el método de punto. Escriba una referencia al objeto, como una variable que contiene el objeto o un comando que obtiene el objeto. A continuación, escriba un punto (.) seguido del nombre de propiedad.

Por ejemplo, el comando siguiente muestra el valor de la propiedad CreationTime del archivo PowerShell.exe. El comando Get-ChildItem devuelve un objeto FileInfo que representa el archivo PowerShell.exe. El comando se encierra entre paréntesis para garantizar que se ejecute antes de que se acceda a las propiedades. El comando Get-ChildItem va seguido de un punto y del nombre de la propiedad CreationTime, como se muestra a continuación:

         C:\PS> (Get-ChildItem $pshome\PowerShell.exe).creationtime
         Tuesday, March 18, 2008 12:07:52 AM

También puede guardar un objeto en una variable y, a continuación, obtener sus propiedades mediante el método de punto, tal como se muestra en el ejemplo siguiente:

         C:\PS> $a = Get-ChildItem $pshome\PowerShell.exe
         C:\PS> $a.CreationTime
         Tuesday, March 18, 2008 12:07:52 AM

Asimismo, puede usar los cmdlets de Select-Object y Format-List para mostrar los valores de propiedad de un objeto. Select-Object y Format-List tienen un parámetro Property. Puede usar el parámetro Property para especificar una o más propiedades y sus valores. O bien, puede usar el carácter comodín (*) para representar todas las propiedades.

Por ejemplo, el comando siguiente muestra los valores de todas las propiedades del archivo 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
        

PROPIEDADES ESTÁTICAS

Puede usar las propiedades estáticas de las clases de .NET en Windows PowerShell. Las propiedades estáticas son propiedades de clase, a diferencia de las propiedades estándar, que son las propiedades de un objeto.

Para obtener las propiedades estáticas de una clase, use el parámetro Static del cmdlet Get-Member.

Por ejemplo, el comando siguiente obtiene las propiedades estáticas de la clase 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;}

Para obtener el valor de una propiedad estática, use la sintaxis siguiente.

        [<ClassName>]::<Property>

Por ejemplo, el comando siguiente obtiene el valor de la propiedad estática UtcNow de la clase System.DateTime.

        [System.DateTime]::UtcNow

PROPIEDADES DE OBJETOS ESCALARES Y COLECCIONES

Las propiedades de un objeto ("escalar") de un tipo determinado suelen ser diferentes de las propiedades de una colección de objetos del mismo tipo.

Por ejemplo, todos los servicios tienen una propiedad DisplayName, pero una colección de servicios no tiene una propiedad DisplayName. Del mismo modo, todas las colecciones tienen una propiedad Count que indica cuántos objetos se encuentran en la colección, pero los objetos individuales no tienen una propiedad Count.

A partir de Windows PowerShell 3.0, Windows PowerShell trata de evitar los errores de scripting que se derivan de las distintas propiedades de los objetos escalares y las colecciones.

-- Si se envía una colección pero se solicita una propiedad que solo existe en objetos individuales ("escalares"), Windows PowerShell devuelve el valor de esa propiedad para todos los objetos de la colección.

-- Si se solicita la propiedad Count o Length de cero objetos o de un objeto, Windows PowerShell devuelve el valor correcto.

Si la propiedad existe en los objetos individuales y en la colección, Windows PowerShell no modifica el resultado.

Esta característica también funciona en los métodos de objetos escalares y colecciones. Para más información, consulte about_Methods.

EJEMPLOS

Por ejemplo, cada servicio tiene una propiedad DisplayName. El comando siguiente obtiene el valor de la propiedad DisplayName del servicio Audiosrv.

        PS C:\>(Get-Service Audiosrv).DisplayName
        Windows Audio

Sin embargo, una colección o matriz de servicios no tiene un DisplayName. El comando siguiente trata de obtener la propiedad DisplayName de todos los servicios de Windows PowerShell 2.0.

        PS C:\>(Get-Service).DisplayName
        PS C:\>

A partir de Windows PowerShell 3.0, el mismo comando devuelve el valor de la propiedad DisplayName de cada servicio que Get-Service devuelve.

        PS C:\>(Get-Service).DisplayName
        Application Experience
        Application Layer Gateway Service
        Windows All-User Install Agent
        Application Identity
        Application Information
        ...

Por el contrario, una colección de dos o más servicios tiene una propiedad Count, que contiene el número de objetos de la colección.

        PS C:\>(Get-Service).Count
        176

Los servicios individuales no tienen una propiedad Count o Length, tal como se muestra en este comando en Windows PowerShell 2.0.

        PS C:\>(Get-Service Audiosrv).Count
        PS C:\>

A partir de Windows PowerShell 3.0, el comando devuelve el valor Count correcto.

        PS C:\>(Get-Service Audiosrv).Count
        1

VEA TAMBIÉN

about_Methods

about_Objects

Get-Member

Select-Object

Format-List