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 cmdletenAdd-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 psextended
MemberSet.
$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.FileInfo
och 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.