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
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 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 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 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 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 $null
in modo implicito.
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.