Sobre os membros intrínsecos

Descrição breve

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 são normalmente escondidos 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 uma exibição do objeto. Para obter mais informações sobre as propriedades de MemberSet , consulte PSMemberSet.

Cada objeto do PowerShell inclui as seguintes propriedades.

  • 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 [psobject] instância ou, se não houver wrapper, é o próprio objeto de entrada.

  • psadapted

    O psadaptedMemberSet mostra o objeto base mais os membros adaptados, se presentes. Membros adaptados são adicionados pelo Extended Type System (ETS).

  • psextended

    O psextendedMemberSetmostra apenas os membros adicionados pelos arquivos Types.ps1xml e pelo cmdlet Add-Member. Qualquer objeto pode ser estendido em tempo de execução usando o Add-Member cmdlet.

  • 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 é uma tabela de 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 Get-Memberdo , 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 convertendo a 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 da 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.

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 ou a conclusão de Get-Member -Force tabulação.

ForEach() e Where()

Os ForEach() métodos 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

As propriedades Count e Length estão disponíveis para todos os objetos do PowerShell, não apenas coleções. Eles são semelhantes entre si, mas 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 index para acessar o primeiro elemento retorna o próprio objeto. 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 obter mais informações, consulte about_Operators.

Método New() para tipos

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

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

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

Para saber mais, confira about_Classes.