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
psbase
MemberSet 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
psadapted
MemberSet muestra el objeto base más los miembros adaptados, si están presentes. El sistema de tipos extendidos (ETS) agrega miembros adaptados.psextended
MemberSet solo 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 elAdd-Member
cmdlet .psobject
psobject
MemberSet 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-Member
de , 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 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…
Información de tipo
pstypenames
CodeProperty 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.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 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).