Condividi tramite


Informazioni sui membri intrinseci

Breve descrizione

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 degli oggetti

I membri intrinseci includono un set di proprietà MemberSet che rappresentano una visualizzazione dell'oggetto. Per ulteriori informazioni sulle proprietà del 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

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

  • psextended

    Il MemberSetsolo 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 riflessione 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

Confrontalo con l'oggetto creato tramite la conversione della 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à ora fanno 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 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.

Metodi

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.

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. è scalare e ha un count intrinseco e lunghezza pari a 0.

Anche se le proprietà Count e Length sono simili, possono operare 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 ulteriori informazioni su queste proprietà, consultare about_Properties.

Tipi scalari di indicizzazione degli array

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 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.