Tudnivalók a belső tagokról

Rövid leírás

Információkat nyújt a PowerShell belső tagjairól, amelyek minden PowerShell-objektum számára elérhetők.

Részletes leírás

Objektumok létrehozásakor a PowerShell minden objektumhoz hozzáad néhány "rejtett" tulajdonságot és metódust. Ezeket a tulajdonságokat és metódusokat belső tagoknak nevezzük. Ezek a belső tagok általában rejtettek a nézet elől. Ezek a rejtett tagok a Get-Member Force paraméterrel láthatók.

Objektumnézetek

A belső tagok olyan MemberSet-tulajdonságokat tartalmaznak, amelyek az objektum nézetét képviselik. További információ a MemberSet tulajdonságairól: PSMemberSet.

Minden PowerShell-objektum a következő tulajdonságokat tartalmazza.

  • psbase

    A psbaseMemberSet az alapobjektum tagjait tartalmazza kiterjesztés vagy átalakítás nélkül. Az objektum típusától függően egy példány által [psobject] burkolt .NET-példány, vagy ha nincs burkoló, akkor maga a bemeneti objektum.

  • psadapted

    A psadaptedMemberSet az alapobjektumot és az adaptált tagokat jeleníti meg, ha vannak ilyenek. Az adaptált tagokat a kiterjesztett típusrendszer (ETS) adja hozzá.

  • psextended

    A psextendedMemberSetcsak a Types.ps1xml fájlok és a Tag hozzáadása parancsmag által hozzáadott tagokat jeleníti meg. A parancsmag használatával Add-Member bármely objektum bővíthető futásidőben.

  • psobject

    A psobjectMemberSet egy gazdag tükröződési forrás minden olyan objektumhoz, amely metódusokat, tulajdonságokat és az objektummal kapcsolatos egyéb információkat tartalmaz.

Példák

Ebben a példában $hash egy felhasználóval kapcsolatos információkat tartalmazó kivonatoló. A Force paraméter Get-Member az objektum belső tagjait mutatja.

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

A használat psobject hasonló a használathoz Get-Member, de nagyobb rugalmasságot biztosít. Számba vehet például egy objektum tulajdonságait és értékeit.

$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

Hasonlítsa össze a kivonatoló PSCustomObjectre konvertálásával létrehozott objektummal.

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

Figyelje meg, hogy a kivonatoló kulcsai a PSCustomObject tulajdonságává lettek konvertálva. Az új tulajdonságok mostantól a psextendedMemberSet részét képezik.

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

Típusadatok

A pstypenamesCodeProperty az objektumtípus-hierarchiát az öröklés sorrendjében sorolja fel. Példa:

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

A kimenet a legspecifikusabb objektumtípussal kezdődik, System.IO.FileInfoés a leggenerikusabb típusra folytatódik. System.Object

Metódusok

A PowerShell két rejtett metódust ad hozzá az összes PowerShell-objektumhoz. Ezek a metódusok nem láthatók a parancs vagy a Get-Member -Force lapkizárás használatával.

ForEach() és Where()

A ForEach() metódusok és Where() a metódusok minden PowerShell-objektum számára elérhetők. A gyűjtemények használatakor azonban ezek a leg hasznosak. A metódusok használatáról további információt a about_Arrays talál.

Tulajdonságok

A Darabszám és a Hossz tulajdonság nem csak gyűjteményekben, hanem minden PowerShell-objektumban elérhető. Ezek hasonlóak egymáshoz, de az adattípustól függően eltérően működhetnek. Egy sztring hossza például a sztringben szereplő karakterek száma. A Count tulajdonság az objektum példányainak száma.

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

További információ ezekről a tulajdonságokról: about_Properties.

Tömbindexelési skaláris típusok

Ha egy objektum nem indexelt gyűjtemény, az index operátorral az első elemhez való hozzáféréssel magát az objektumot adja vissza. Az első elemen túli indexértékek visszaadják $nullaz értéket.

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

További információ: about_Operators.

New() metódus típusokhoz

A PowerShell 5.0-tól kezdve minden .NET-típushoz hozzáad egy statikus New() metódust. Az alábbi példák ugyanazt az eredményt eredményezik.

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

new() A metódus használata jobban teljesít, mint a használataNew-Object.

További információ: about_Classes.