Dela via


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 inbyggda medlemmar. Dessa inbyggda medlemmar är normalt dolda från vyn. Dessa dolda medlemmar kan ses med parametern Force för Get-Member.

Objektvyer

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

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

  • psbase

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

  • psadapted

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

  • psextended

    psextended MemberSetendast visar medlemmar som 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

    psobject MemberSet är en rik reflektionskälla för alla objekt som inkluderar metoder, egenskaper och annan information om objektet.

Exempel

I det här exemplet är $hash en hashtabell som innehåller information om en användare. Parametern Force för Get-Member visar oss objektets inbyggda medlemmar.

$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 större 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

pstypenames CodeProperty- 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 tabbkomplettering.

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

Alla skalärtyper har inte egenskaper för antal eller längd i bastypen. PowerShell lägger till den saknade egenskapen som en inbyggd medlem för alla skalärtyper.

Not

Uninitialiserade variabler är implicit $null. $null är skalär och har en inbyggd Count och Length på 0.

Även om egenskaperna Count och Length är liknande, kan de fungera annorlunda beroende på datatypen. Till exempel är längd för en 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 använda metoden new() än att använda New-Object.

Mer information finns i about_Classes.