Condividi tramite


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 il Add-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-Memberdi , 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 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

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