Búsqueda de sitios web

about_Intrinsic_Members


Breve descripción

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 a la vista. Estos miembros ocultos se pueden ver usando el parámetro Force de Get-Member.

Vistas de objetos

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 de MemberSet, consulte PSMemberSet.

Cada objeto de PowerShell incluye las siguientes propiedades.

  • psbase

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

  • psadaptado

    El psadapted MemberSet muestra el objeto base más los miembros adaptados, si están presentes. Los miembros adaptados son agregados por el Sistema de tipo extendido (ETS).

  • psextendido

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

  • psobjeto

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

Ejemplos

Para 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…

Usar psobject es similar a usar Get-Member, pero proporciona más flexibilidad. Por ejemplo, puedes 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

Compare eso con el objeto creado al convertir 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 en PSCustomObject. Las nuevas propiedades ahora forman parte del psextended MemberSet.

$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…

Clasificar información

pstypenames CodeProperty enumera la jerarquía de tipos de objetos 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.FileInfo, y 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 usando el comando Get-Member -Force o la función de tabulación.

Para cada() y donde()

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

Propiedades

Las propiedades Count y Length están disponibles para todos los objetos de PowerShell, no solo para las colecciones. Son similares entre sí, pero pueden funcionar de manera diferente según el 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 indexada, el uso del operador de índice para acceder al primer elemento devuelve el objeto en sí. 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_Operadores.

Nuevo método() para tipos

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

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

Usar el método new() funciona mejor que usar New-Object.

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

Artículos relacionados