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 oggetti
I membri intrinseci includono un set di proprietà MemberSet che rappresentano una visualizzazione dell'oggetto. Per ulteriori informazioni sulle proprietà di MemberSet, vedere PSMemberSet.
Ogni oggetto PowerShell include le proprietà seguenti.
psbase
Il
psbase
MemberSet 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
psadapted
MemberSet mostra l'oggetto di base più i membri adattati, se presenti. I membri adattati vengono aggiunti dal sistema ETS (Extended Type System).psextended
Il
MemberSet solo mostra i membri aggiunti dai file Types.ps1xmle dal cmdlet add-member . Qualsiasi oggetto può essere esteso in fase di esecuzione usando il cmdlet Add-Member
.psobject
Il
psobject
MemberSet è un'ampia fonte di riflessione per qualsiasi oggetto, comprendendo 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
Confronta ciò con l'oggetto creato dalla conversione della tabella hash a 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à sono ora parte del 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…
Informazioni sul tipo
Il pstypenames
CodeProperty 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.FileInfo
e 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 del tab.
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 $null
in modo implicito.
Anche se le proprietà Count e 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 per l'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 ulteriori informazioni, consultare about_Operators.
Metodo New() per i tipi di dati
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.