Compartilhar via


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 detalhada

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 visão. 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 rica 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 isso com o objeto criado pela conversão da tabela de hash em um objeto 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 da tabela de hash 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…

Digite informações

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.

Métodos

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.

Método New() 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.