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 , vea PSMemberSet.

Cada objeto de PowerShell incluye las siguientes propiedades.

  • psbase

    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 ajustada por una [psobject] instancia o, si no hay ningún contenedor, es el propio objeto de entrada.

  • psadapted

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

  • psextended

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

  • psobject

    psobjectMemberSet es una fuente enriquecida 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 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 psobject es similar al uso Get-Memberde , 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 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 tipo

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 o la Get-Member -Force finalización de tabulación.

ForEach() y Where()

Los ForEach() métodos 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, consulte about_Arrays.

Propiedades

Las propiedades Count y Length están disponibles para todos los objetos de PowerShell, no solo colecciones. Son similares entre sí, pero 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, consulte about_Properties.

Tipos escalares de indexación de matrices

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 estático New() 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 new() método funciona mejor que usar New-Object.

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