Compartir a través de


Acerca de los miembros intrínsecos

Descripción breve

Proporciona información sobre los miembros intrínsecos de PowerShell que están disponibles para todos los objetos de PowerShell.

Descripción detallada

Cuando se crean objetos, PowerShell agrega algunas propiedades y métodos "ocultos" a cada objeto. Estas propiedades y métodos se conocen como miembros intrínsecos. Estos miembros intrínsecos normalmente están ocultos de la vista. Estos miembros ocultos se pueden ver mediante el parámetro Force de Get-Member.

Vistas de objeto

Los miembros intrínsecos incluyen un conjunto de propiedades MemberSet que representan una vista del objeto. Para obtener más información sobre las propiedades MemberSet, consulte PSMemberSet.

Cada objeto de PowerShell incluye las siguientes propiedades.

  • psbase

    El psbaseMemberSet contiene los miembros del objeto base sin extensión ni adaptación. En función del tipo de objeto, es una instancia de .NET envuelta por una instancia de [psobject] o, si no hay ningún contenedor, es el objeto de entrada en sí mismo.

  • psadapted

    El psadaptedMemberSet muestra el objeto base más los miembros adaptados, si están presentes. El sistema de tipos extendidos (ETS) agrega miembros adaptados.

  • psextended

    El psextendedMemberSetsolo muestra los miembros agregados por los archivos Types.ps1xml y el cmdlet Add-Member. Cualquier objeto se puede extender en tiempo de ejecución mediante el cmdlet Add-Member.

  • psobject

    El psobjectMemberSet es una rica fuente de reflexión para cualquier objeto que incluya métodos, propiedades y otra información sobre el objeto.

Ejemplos

En este ejemplo, $hash es una tabla hash que contiene información sobre un usuario. El parámetro Force de Get-Member nos muestra los miembros intrínsecos del objeto.

$hash = @{
    Age  = 33
    Name = 'Bob'
}

$hash | Get-Member -Force -MemberType MemberSet, CodeProperty
   TypeName: System.Collections.Hashtable

Name        MemberType   Definition
----        ----------   ----------
pstypenames CodeProperty System.Collections.ObjectModel.Collection`1[[System.String, System.Private.CoreLib, Version=7…
psadapted   MemberSet    psadapted {Item, IsReadOnly, IsFixedSize, IsSynchronized, Keys, Values, SyncRoot, Count, Add,…
psbase      MemberSet    psbase {Item, IsReadOnly, IsFixedSize, IsSynchronized, Keys, Values, SyncRoot, Count, Add, Cl…
psextended  MemberSet    psextended {}
psobject    MemberSet    psobject {Members, Properties, Methods, ImmediateBaseObject, BaseObject, TypeNames, get_Membe…

El uso de psobject es similar al uso de Get-Member, pero proporciona más flexibilidad. Por ejemplo, puede enumerar las propiedades de un objeto y sus valores.

$hash.psobject.Properties | Select-Object Name, MemberType, Value
Name           MemberType                    Value
----           ----------                    -----
IsReadOnly       Property                    False
IsFixedSize      Property                    False
IsSynchronized   Property                    False
Keys             Property              {Age, Name}
Values           Property                {33, Bob}
SyncRoot         Property {[Age, 33], [Name, Bob]}
Count            Property                        2

Compárelo con el objeto creado convirtiendo la tabla hash en un PSCustomObject.

$user = [pscustomobject]$hash
$user.psobject.Properties | Select-Object Name, MemberType, Value
Name   MemberType Value
----   ---------- -----
Age  NoteProperty    33
Name NoteProperty   Bob

Observe que las claves de la tabla hash se han convertido en propiedades de la PSCustomObject. Las nuevas propiedades forman parte de psextendedMemberSet.

$user | Get-Member -Force -MemberType MemberSet, CodeProperty
   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
pstypenames CodeProperty System.Collections.ObjectModel.Collection`1[[System.String, System.Private.CoreLib, Version=7…
psadapted   MemberSet    psadapted {ToString, GetType, Equals, GetHashCode}
psbase      MemberSet    psbase {ToString, GetType, Equals, GetHashCode}
psextended  MemberSet    psextended {Age, Name}
psobject    MemberSet    psobject {Members, Properties, Methods, ImmediateBaseObject, BaseObject, TypeNames, get_Membe…

Información de tipos

El pstypenamesCodeProperty enumera la jerarquía de tipos de objeto en orden de herencia. Por ejemplo:

$file = Get-Item C:\temp\test.txt
$file.pstypenames
System.IO.FileInfo
System.IO.FileSystemInfo
System.MarshalByRefObject
System.Object

La salida comienza con el tipo de objeto más específico, System.IO.FileInfoy continúa hasta el tipo más genérico, System.Object.

Métodos

PowerShell agrega dos métodos ocultos a todos los objetos de PowerShell. Estos métodos no son visibles mediante el comando Get-Member -Force o la finalización con tabulación.

ForEach() y Where()

Los métodos ForEach() y Where() están disponibles para todos los objetos de PowerShell. Sin embargo, son más útiles al trabajar con colecciones. Para obtener más información sobre cómo usar estos métodos, vea about_Arrays.

Propiedades

No todos los tipos escalares poseen las propiedades Count o Length en el tipo base. PowerShell agrega la propiedad que falta como miembro intrínseco para todos los tipos escalares.

Nota

Las variables sin inicializar se $nullimplícitamente. $null es escalar y tiene valores intrínsecos de Count y Length de 0.

Aunque las propiedades Count y Length son similares, pueden funcionar de forma diferente en función del tipo de datos. Por ejemplo, la Longitud de una cadena es el número de caracteres de la cadena. La propiedad Count es el número de instancias del objeto .

PS> $str = 'string'
PS> $str.Length
6
PS> $str.Count
1

Para obtener más información sobre estas propiedades, vea about_Properties.

Indexación de matrices con tipos escalares

Cuando un objeto no es una colección indizada, el uso del operador index para tener acceso al primer elemento devuelve el propio objeto. Los valores de índice más allá del primer elemento devuelven $null.

PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True

Para obtener más información, consulte about_Operators.

Método New() para tipos

A partir de PowerShell 5.0, PowerShell agrega un método de New() estático para todos los tipos de .NET. Los ejemplos siguientes generan el mismo resultado.

$expression = New-Object -TypeName regex -ArgumentList 'pattern'
$expression = [regex]::new('pattern')

El uso del método new() funciona mejor que usar New-Object.

Para más información, consulte about_Classes (Acerca de las clases).