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
psbaseMemberSet 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
psadaptedMemberSet 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 psextendedMemberSet 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 cmdletAdd-Member.psobjeto El
psobjectMemberSet 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.