Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Descripción breve
Describe cómo usar propiedades de objeto en PowerShell.
Descripción larga
PowerShell usa colecciones estructuradas de información denominada 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 PowerShell.
La asociación entre un elemento y su objeto está muy cerca. Al cambiar un objeto, normalmente se cambia el elemento que representa. Por ejemplo, cuando se obtiene un archivo en PowerShell, no se obtiene el archivo real. En su lugar, se obtiene un objeto FileInfo que representa el archivo. Al cambiar el objeto FileInfo, el archivo también cambia.
La mayoría de los objetos tienen propiedades. Las propiedades son los datos asociados a un objeto. Los distintos 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 es el atributo de solo lectura y $False si no lo hace. Un objeto DirectoryInfo, que representa un directorio del sistema de archivos, tiene una propiedad Parent que contiene la ruta de acceso al directorio primario.
Propiedades de 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 siguiente comando obtiene el archivo PowerShell.exe y lo envía a Get-Member.
La variable automática $Pshome contiene la ruta de acceso del directorio de instalación de 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. Al trabajar en PowerShell, tiene acceso a todos los miembros de los objetos.
Para obtener solo las propiedades de un objeto y no los métodos, use el parámetro MemberType del Get-Member cmdlet con un valor de "property", 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 PowerShell.
Valores de propiedades
Aunque cada objeto de un tipo específico tiene las mismas propiedades, los valores de esas propiedades describen el objeto determinado. Por ejemplo, cada objeto FileInfo tiene una propiedad CreationTime, pero el valor de esa propiedad difiere para cada archivo.
La forma más común de obtener los valores de las propiedades de un objeto es usar el método de puntos. Escriba una referencia al objeto, como una variable que contenga el objeto o un comando que obtiene el objeto . A continuación, escriba un punto (.) seguido del nombre de la propiedad.
Por ejemplo, el siguiente comando muestra el valor de la propiedad CreationTime del archivo PowerShell.exe. El Get-ChildItem comando devuelve un objeto FileInfo que representa el archivo PowerShell.exe. El comando se incluye entre paréntesis para asegurarse de que se ejecuta antes de acceder a las propiedades. El Get-ChildItem comando va seguido de un punto y el nombre de la propiedad CreationTime, como se indica a continuación:
(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 dot, como se muestra en el ejemplo siguiente:
$a = Get-ChildItem $pshome\PowerShell.exe
$a.CreationTime
Tuesday, March 18, 2008 12:07:52 AM
También puede usar los cmdlets 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 varias propiedades y sus valores. O bien, puede usar el carácter comodín (*) para representar todas las propiedades.
Por ejemplo, el siguiente comando muestra los valores de todas las propiedades del archivo PowerShell.exe.
Get-ChildItem $pshome\PowerShell.exe | Format-List -Property *
PSPath : Microsoft.PowerShell.Core\FileSystem::C:\Windows\System3
2\WindowsPowerShell\v1.0\PowerShell.exe
PSParentPath : Microsoft.PowerShell.Core\FileSystem::C:\Windows\System3
2\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.16299.15 (WinBuild.160101.0800)
FileDescription: Windows PowerShell
Product: Microsoft Windows Operating System
ProductVersion: 10.0.16299.15
Debug: False
Patched: False
PreRelease: False
PrivateBuild: False
SpecialBuild: False
Language: English (United States)
BaseName : PowerShell
Target : {C:\Windows\WinSxS\amd64_microsoft-windows-powershell-ex
e_31bf3856ad364e35_10.0.16299.15_none_8c022aa6735716ae\p
owershell.exe}
LinkType : HardLink
Name : PowerShell.exe
Length : 449024
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.ex
Extension : .exe
CreationTime : 9/29/2017 6:43:19 AM
CreationTimeUtc : 9/29/2017 1:43:19 PM
LastAccessTime : 9/29/2017 6:43:19 AM
LastAccessTimeUtc : 9/29/2017 1:43:19 PM
LastWriteTime : 9/29/2017 6:43:19 AM
LastWriteTimeUtc : 9/29/2017 1:43:19 PM
Attributes : Archive
Propiedades estáticas
Puede usar las propiedades estáticas de las clases de .NET en PowerShell. Las propiedades estáticas son propiedades de clase, a diferencia de las propiedades estándar, que son 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 siguiente comando obtiene el valor de la propiedad estática UtcNow de la System.DateTime clase.
[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 como propiedad DisplayName , pero una colección de servicios no tiene una propiedad DisplayName .
El siguiente comando obtiene el valor de la propiedad DisplayName del servicio 'Audiosrv'.
(Get-Service Audiosrv).DisplayName
Windows Audio
A partir de PowerShell 3.0, PowerShell intenta evitar errores de scripting que se derivan de las diferentes propiedades de los objetos escalares y las colecciones. El mismo comando devuelve el valor de la propiedad DisplayName de cada servicio que Get-Service devuelve.
(Get-Service).DisplayName
Application Experience
Application Layer Gateway Service
Windows All-User Install Agent
Application Identity
Application Information
...
Al enviar una colección, pero solicitar una propiedad que solo existe en objetos únicos ("escalares"), PowerShell devuelve el valor de esa propiedad para cada objeto de la colección.
Todas las colecciones tienen una propiedad Count que devuelve el número de objetos que hay en la colección.
(Get-Service).Count
176
A partir de PowerShell 3.0, si solicita la propiedad Count o Length de cero objetos o un objeto, PowerShell devuelve el valor correcto.
(Get-Service Audiosrv).Count
1
Si existe una propiedad en los objetos individuales y en la colección, solo se devuelve la propiedad de la colección.
$collection = @(
[pscustomobject]@{length = "foo"}
[pscustomobject]@{length = "bar"}
)
# PowerShell returns the collection's Length.
$collection.length
2
Esta característica también funciona en métodos de objetos escalares y colecciones. Para obtener más información, consulte about_Methods.