Informazioni sui membri intrinseci

Breve descrizione

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

Descrizione lunga

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

    Il psbaseMemberSet contiene i membri dell'oggetto di base senza estensione o adattamento. A seconda del tipo di oggetto, si tratta di un'istanza .NET sottoposta a wrapping da un'istanza di [psobject] oppure, se non è presente alcun wrapper, si tratta dell'oggetto di input stesso.

  • psadapted

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

  • psextended

    Il psextendedMemberSetsolo mostra i membri aggiunti dai file Types.ps1xml e dal cmdlet add-member. Qualsiasi oggetto può essere esteso in fase di esecuzione usando il cmdlet Add-Member.

  • psobject

    Il psobjectMemberSet un'ampia fonte 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 psobject è simile all'uso di Get-Member, 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à nel PSCustomObject. Le nuove proprietà fanno ora parte del 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

Il pstypenamesCodeProperty elenca la gerarchia dei tipi di oggetto in ordine di ereditarietà. Per 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.

Methods

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

ForEach() e Where()

I metodi ForEach() 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.

PowerShell 7.6-preview.5 aggiunto PSForEach() come alias per il ForEach() metodo e PSWhere() come alias per il Where() metodo . Usare questi alias per evitare conflitti con ForEach() e Where() che potrebbero essere definiti nella classe di base dell'oggetto . Ad esempio, la System.Collections.Generic.List<T> classe definisce il proprio ForEach() metodo. Usare PSForEach() per evitare di chiamare il metodo della classe base.

Proprietà

Non tutti i tipi scalari hanno proprietà Count o Length nel tipo di base. PowerShell aggiunge la proprietà mancante come membro intrinseco per tutti i tipi scalari.

Nota

Le variabili non inizializzate vengono $nullin modo implicito. $null è scalare e ha un count intrinseco e lunghezza pari a 0.

Anche se le proprietà Count e Length Length sono simili, 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.

new() metodo per i tipi

A partire da PowerShell 5.0, PowerShell aggiunge un metodo new() statico 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 metodo new() offre prestazioni migliori rispetto all'uso di New-Object.

Per altre informazioni, vedere about_Classes.