Sobre os membros intrínsecos

Descrição curta

Fornece informações sobre os membros intrínsecos do PowerShell que estão disponíveis para todos os objetos do PowerShell.

Descrição longa

Quando os objetos são criados, o PowerShell adiciona algumas propriedades e métodos "ocultos" a cada objeto. Essas propriedades e métodos são conhecidos como membros intrínsecos . Esses membros intrínsecos normalmente ficam ocultos da vista. Esses membros ocultos podem ser vistos usando o parâmetro Force de Get-Member.

Exibições de objeto

Os membros intrínsecos incluem um conjunto de propriedades MemberSet que representam a exibição do objeto. Para obter mais informações sobre as propriedades MemberSet, consulte PSMemberSet.

Cada objeto do PowerShell inclui as propriedades a seguir.

  • psbase

    O psbaseMemberSet contém os membros do objeto base sem extensão ou adaptação. Dependendo do tipo de objeto, é uma instância do .NET encapsulada por uma instância de [psobject] ou, se não houver wrapper, é o próprio objeto de entrada.

  • psadapted

    O psadaptedMemberSet mostra o objeto de base mais os membros adaptados, se presentes. Os membros adaptados são adicionados pelo ETS (Sistema de Tipo Estendido).

  • psextended

    O psextendedMemberSetapenas mostra os membros adicionados pelos arquivos Types.ps1xml e o Add-Member cmdlet. Qualquer objeto pode ser estendido em runtime usando o cmdlet Add-Member.

  • psobject

    O psobjectMemberSet é uma fonte avançada de reflexão para qualquer objeto que inclua métodos, propriedades e outras informações sobre o objeto.

Exemplos

Para este exemplo, $hash é um hash que contém informações sobre um usuário. O parâmetro Force de Get-Member nos mostra os membros intrínsecos do 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 é semelhante ao uso de Get-Member, mas fornece mais flexibilidade. Por exemplo, você pode enumerar as propriedades de um objeto e seus 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-o ao objeto criado ao converter o hashtable em um PSCustomObject .

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

Observe que as chaves do hashtable foram convertidas em propriedades no PSCustomObject. As novas propriedades agora fazem parte do 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…

Informações de tipo

O pstypenamesCodeProperty lista a hierarquia de tipo de objeto em ordem de herança. Por exemplo:

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

A saída começa com o tipo de objeto mais específico, System.IO.FileInfoe continua até o tipo mais genérico, System.Object.

Methods

O PowerShell adiciona dois métodos ocultos a todos os objetos do PowerShell. Esses métodos não são visíveis usando o comando Get-Member -Force ou o preenchimento de guia.

ForEach() e Where()

Os métodos ForEach() e Where() estão disponíveis para todos os objetos do PowerShell. No entanto, eles são mais úteis ao trabalhar com coleções. Para obter mais informações sobre como usar esses métodos, consulte about_Arrays.

Propriedades

Nem todos os tipos escalares têm propriedades de Contagem ou Comprimento no tipo de base. O PowerShell adiciona a propriedade ausente como um membro intrínseco para todos os tipos escalares.

Nota

Variáveis não inicializadas são implicitamente $null. $null é escalar e tem um intrínseco de Contagem e Comprimento de 0.

Embora as propriedades Count e Length sejam semelhantes, elas podem funcionar de forma diferente dependendo do tipo de dados. Por exemplo, o comprimento de uma cadeia de caracteres é o número de caracteres na cadeia de caracteres. A propriedade Count é o número de instâncias do objeto.

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

Para obter mais informações sobre essas propriedades, consulte about_Properties.

Tipos escalares de indexação de matriz

Quando um objeto não é uma coleção indexada, usar o operador de índice para acessar o primeiro elemento retorna o objeto em si. Valores de índice além do primeiro elemento retornam $null.

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

Para mais informações, consulte about_Operators.

new() método para tipos

A partir do PowerShell 5.0, o PowerShell adiciona um método de new() estático para todos os tipos de .NET. Os exemplos a seguir produzem o mesmo resultado.

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

Usar o método new() tem um desempenho melhor do que usar New-Object.

Para saber mais, confira about_Classes.