Informace o vnitřních členech

Krátký popis

Poskytuje informace o vnitřních členech PowerShellu, které jsou k dispozici pro všechny objekty PowerShellu.

Podrobný popis

Při vytváření objektů přidá PowerShell do každého objektu některé "skryté" vlastnosti a metody. Tyto vlastnosti a metody se označují jako vnitřní členy. Tyto vnitřní členy jsou obvykle skryté v zobrazení. Tyto skryté členy lze zobrazit pomocí parametru Force funkce Get-Member.

Zobrazení objektů

Vnitřní členy zahrnují sadu vlastností MemberSet , které představují zobrazení objektu. Další informace o vlastnostech MemberSet naleznete v tématu PSMemberSet.

Každý objekt PowerShellu obsahuje následující vlastnosti.

  • psbase

    MemberSet psbase obsahuje členy základního objektu bez rozšíření nebo přizpůsobení. V závislosti na typu objektu je to buď instance .NET zabalená [psobject] instancí, nebo pokud neexistuje obálka, jedná se o samotný vstupní objekt.

  • psadapted

    ČlenSet psadapted zobrazuje základní objekt plus upravené členy, pokud je k dispozici. Upravené členy jsou přidány rozšířeným typem systému (ETS).

  • psextended

    Sada psextendedMemberSetzobrazuje pouze členy přidané soubory Types.ps1xml a rutina Add-Member . Pomocí rutiny Add-Member je možné rozšířit libovolný objekt za běhu.

  • psobject

    MemberSet psobject bohatý zdroj reflexe pro libovolný objekt, který obsahuje metody, vlastnosti a další informace o objektu.

Příklady

V tomto příkladu $hash je hashovací tabulka obsahující informace o uživateli. Parametr ForceGet-Member ukazuje vnitřní členy objektu.

$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…

Použití psobject se podobá použití Get-Member, ale poskytuje větší flexibilitu. Můžete například vytvořit výčet vlastností objektu a jejich hodnot.

$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

Porovnejte to s objektem vytvořeným převodem hashtable na PSCustomObject.

$user = [pscustomobject]$hash
$user.psobject.Properties | Select-Object Name, MemberType, Value
Name   MemberType Value
----   ---------- -----
Age  NoteProperty    33
Name NoteProperty   Bob

Všimněte si, že klíče z hashtable byly převedeny na vlastnosti v PSCustomObject. Nové vlastnosti jsou nyní součástí 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…

Informace o typu

pstypenamesCodeProperty uvádí hierarchii typů objektů v pořadí dědičnosti. Příklad:

$file = Get-Item C:\temp\test.txt
$file.pstypenames
System.IO.FileInfo
System.IO.FileSystemInfo
System.MarshalByRefObject
System.Object

Výstup začíná nejtypičtějším typem System.IO.FileInfoobjektu a pokračuje až k nejogeneričtějšímu typu System.Object.

Metody

PowerShell přidá ke všem objektům PowerShellu dvě skryté metody. Tyto metody nejsou viditelné pomocí příkazu nebo dokončování tabulátoru Get-Member -Force .

ForEach() a Where()

Všechny objekty PowerShellu ForEach() jsou k dispozici a Where() metody. Jsou ale nejužitečnější při práci s kolekcemi. Další informace o tom, jak tyto metody používat, najdete v tématu about_Arrays.

Vlastnosti

Vlastnosti Count a Length jsou k dispozici pro všechny objekty PowerShellu, nejen pro kolekce. Jsou podobné sobě, ale v závislosti na datovém typu můžou fungovat odlišně. Například délka řetězce je počet znaků v řetězci. Vlastnost Count je počet instancí objektu.

PS> $str = 'string'
PS> $str.Length
6
PS> $str.Count
1

Další informace o těchto vlastnostech najdete v tématu about_Properties.

Skalární typy indexování polí

Pokud objekt není indexovanou kolekcí, vrátí použití operátoru indexu pro přístup k prvnímu prvku samotný objekt. Hodnoty indexu nad rámec prvního prvku vrátí $null.

PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True

Další informace najdete v tématu about_Operators.

Metoda New() pro typy

Počínaje PowerShellem 5.0 přidá PowerShell statickou New() metodu pro všechny typy .NET. Následující příklady vytvoří stejný výsledek.

$expression = New-Object -TypeName regex -ArgumentList 'pattern'
$expression = [regex]::new('pattern')

Použití metody new() funguje lépe než použití New-Object.

Další informace najdete v tématu about_Classes.