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
psextended
mostra solo i membri aggiunti dai file Types.ps1xml e dal cmdlet Add-Member. Qualsiasi oggetto può essere esteso in fase di esecuzione usando ilAdd-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 psobject
Get-Member
di , 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 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
pstypenames
CodeProperty 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.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 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.