Informazioni sui membri intrinseci

Descrizione breve

Fornisce informazioni sui membri intrinseci di PowerShell disponibili per tutti gli oggetti di PowerShell.

Descrizione dettagliata

Quando vengono creati oggetti, PowerShell aggiunge alcune proprietà e metodi "nascosti" a ogni oggetto. Queste proprietà e metodi sono noti come membri intrinseci. Questi membri intrinseci sono in genere nascosti dalla visualizzazione. Questi membri nascosti possono essere visualizzati usando il parametro Force di Get-Member.

Visualizzazioni oggetto

I membri intrinseci includono un set di proprietà MemberSet che rappresentano una visualizzazione dell'oggetto . Per altre informazioni sulle proprietà MemberSet , vedere PSMemberSet.

Ogni oggetto PowerShell include le proprietà seguenti.

  • psbase

    MemberSet psbase contiene i membri dell'oggetto di base senza estensione o adattamento. A seconda del tipo di oggetto, si tratta di un'istanza .NET di cui è stato eseguito il wrapping da un'istanza [psobject] o, se non è presente alcun wrapper, si tratta dell'oggetto di input stesso.

  • psadapted

    MemberSet psadapted mostra l'oggetto di base più i membri adattati, se presenti. I membri adattati vengono aggiunti dal sistema ETS (Extended Type System).

  • psextended

    MemberSet psextendedmostra solo i membri aggiunti dai file Types.ps1xml e dal cmdlet Add-Member. Qualsiasi oggetto può essere esteso in fase di esecuzione usando il Add-Member cmdlet .

  • psobject

    MemberSet psobject è un'origine avanzata di reflection per qualsiasi oggetto che include metodi, proprietà e altre informazioni sull'oggetto.

Esempi

Per questo esempio, $hash è una tabella hash contenente informazioni su un utente. Il parametro Force di Get-Member mostra i membri intrinseci dell'oggetto .

$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…

L'uso di è simile all'uso psobjectGet-Memberdi , ma offre maggiore flessibilità. Ad esempio, è possibile enumerare le proprietà di un oggetto e i relativi valori.

$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

Confrontarlo con l'oggetto creato convertendo la tabella hash in un PSCustomObject.

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

Si noti che le chiavi della tabella hash sono state convertite in proprietà in PSCustomObject. Le nuove proprietà fanno ora parte di 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…

Informazioni sul tipo

pstypenamesCodeProperty elenca la gerarchia dei tipi di oggetto in ordine di ereditarietà. Ad esempio:

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

L'output inizia con il tipo di oggetto più specifico, System.IO.FileInfoe continua fino al tipo più generico, System.Object.

Metodi

PowerShell aggiunge due metodi nascosti a tutti gli oggetti di PowerShell. Questi metodi non sono visibili usando il comando o il Get-Member -Force completamento tramite tabulazione.

ForEach() e Where()

I ForEach() metodi e Where() sono disponibili per tutti gli oggetti Di PowerShell. Tuttavia, sono più utili quando si lavora con le raccolte. Per altre informazioni su come usare questi metodi, vedere about_Arrays.

Proprietà

Le proprietà Count e Length sono disponibili per tutti gli oggetti di PowerShell, non solo per le raccolte. Sono simili tra loro, ma possono funzionare in modo diverso a seconda del tipo di dati. Ad esempio, la lunghezza di una stringa è il numero di caratteri nella stringa. La proprietà Count è il numero di istanze dell'oggetto .

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

Per altre informazioni su queste proprietà, vedere about_Properties.

Tipi scalari di indicizzazione di matrici

Quando un oggetto non è una raccolta indicizzata, l'operatore index per accedere al primo elemento restituisce l'oggetto stesso. I valori di indice oltre il primo elemento restituiscono $null.

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

Per altre informazioni, vedere about_Operators.

Metodo New() per i tipi

A partire da PowerShell 5.0, PowerShell aggiunge un metodo statico New() per tutti i tipi .NET. Gli esempi seguenti producono lo stesso risultato.

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

L'uso del new() metodo offre prestazioni migliori rispetto all'uso di New-Object.

Per altre informazioni, vedere about_Classes.