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
psbase
MemberSet 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
psadapted
MemberSet 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
psextended
MemberSetapenas mostra os membros adicionados pelos arquivos Types.ps1xml e o Add-Member cmdlet. Qualquer objeto pode ser estendido em runtime usando o cmdletAdd-Member
.psobject
O
psobject
MemberSet é 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 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…
Digite informações
O pstypenames
CodeProperty 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.FileInfo
e 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.