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