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
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[psobject]
instância ou, se não houver wrapper, é o próprio objeto de entrada.psadapted
O
psadapted
MemberSet mostra o objeto base mais os membros adaptados, se presentes. Membros adaptados são adicionados pelo Extended Type System (ETS).psextended
O
psextended
MemberSetmostra apenas os membros adicionados pelos arquivos Types.ps1xml e pelo cmdlet Add-Member. Qualquer objeto pode ser estendido em tempo de execução usando oAdd-Member
cmdlet.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
é 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-Member
do , 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 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…
Informações de tipo
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 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-Object
o .
Para saber mais, confira about_Classes.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de