Om inbyggda medlemmar

Kort beskrivning

Innehåller information om PowerShells inbyggda medlemmar som är tillgängliga för alla PowerShell-objekt.

Detaljerad beskrivning

När objekt skapas lägger PowerShell till några "dolda" egenskaper och metoder för varje objekt. Dessa egenskaper och metoder kallas för inbyggda medlemmar. Dessa inbyggda medlemmar är normalt dolda från vyn. Dessa dolda medlemmar kan ses med hjälp av force-parametern get-member.

Objektvyer

De inbyggda medlemmarna innehåller en uppsättning medlemsuppsättningsegenskaper som representerar en vy över objektet. Mer information om medlemsuppsättningsegenskaper finns i PSMemberSet.

Varje PowerShell-objekt innehåller följande egenskaper.

  • psbase

    psbaseMemberSet innehåller medlemmarna i basobjektet utan tillägg eller anpassning. Beroende på objekttypen är det antingen en .NET-instans omsluten av en [psobject] instans eller, om det inte finns någon omslutning, är det själva indataobjektet.

  • psadapted

    psadaptedMemberSet visar basobjektet plus de anpassade medlemmarna, om de finns. Anpassade medlemmar läggs till av ETS (Extended Type System).

  • psextended

    psextendedMemberSetvisar bara de medlemmar som har lagts till av types.ps1xml-filerna och cmdleten Add-Member. Alla objekt kan utökas vid körning med hjälp av cmdleten Add-Member .

  • psobject

    psobjectMemberSet är en omfattande reflektionskälla för alla objekt som innehåller metoder, egenskaper och annan information om objektet.

Exempel

I det här exemplet $hash är en hashtable som innehåller information om en användare. Force-parametern Get-Memberför visar oss de inbyggda medlemmarna i objektet.

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

Att använda psobject liknar att använda Get-Member, men ger mer flexibilitet. Du kan till exempel räkna upp egenskaperna för ett objekt och deras värden.

$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

Jämför det med objektet som skapades genom att konvertera hashtabellen till en PSCustomObject.

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

Observera att nycklarna från hashtabellen har konverterats till egenskaper i PSCustomObject. De nya egenskaperna är nu en del av 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…

Skriv information

pstypenamesCodeProperty visar en lista över objekttypshierarkin i arvsordning. Till exempel:

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

Utdata börjar med den mest specifika objekttypen , System.IO.FileInfooch fortsätter ned till den mest generiska typen, System.Object.

Metoder

PowerShell lägger till två dolda metoder för alla PowerShell-objekt. Dessa metoder visas inte med hjälp av Get-Member -Force kommandot eller tabbslutningen.

ForEach() och Where()

Metoderna ForEach() och Where() är tillgängliga för alla PowerShell-objekt. De är dock mest användbara när du arbetar med samlingar. Mer information om hur du använder dessa metoder finns i about_Arrays.

Egenskaper

Egenskaperna Antal och Längd är tillgängliga för alla PowerShell-objekt, inte bara för samlingar. Dessa liknar varandra men kan fungera olika beroende på datatyp. Till exempel är längdenen sträng antalet tecken i strängen. Egenskapen Count är antalet instanser av objektet.

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

Mer information om dessa egenskaper finns i about_Properties.

Skalära typer av matrisindexering

När ett objekt inte är en indexerad samling returneras själva objektet med hjälp av indexoperatorn för att komma åt det första elementet. Indexvärden utöver det första elementet returnerar $null.

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

Mer information finns i about_Operators.

New()-metod för typer

Från och med PowerShell 5.0 lägger PowerShell till en statisk New() metod för alla .NET-typer. Följande exempel ger samma resultat.

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

Det går bättre att new() använda metoden än att använda New-Object.

Mer information finns i about_Classes.