Select-Object
Hiermee selecteert u objecten of objecteigenschappen.
Syntax
Select-Object
[[-Property] <Object[]>]
[-InputObject <psobject>]
[-ExcludeProperty <string[]>]
[-ExpandProperty <string>]
[-Unique]
[-Last <int>]
[-First <int>]
[-Skip <int>]
[-Wait]
[<CommonParameters>]
Select-Object
[[-Property] <Object[]>]
[-InputObject <psobject>]
[-ExcludeProperty <string[]>]
[-ExpandProperty <string>]
[-Unique]
[-SkipLast <int>]
[<CommonParameters>]
Select-Object
[-InputObject <psobject>]
[-Unique]
[-Wait]
[-Index <int[]>]
[<CommonParameters>]
Select-Object
[-InputObject <psobject>]
[-Unique]
[-SkipIndex <int[]>]
[<CommonParameters>]
Description
De Select-Object
cmdlet selecteert opgegeven eigenschappen van een object of set objecten. Het kan ook unieke objecten, een opgegeven aantal objecten of objecten op een opgegeven positie in een matrix selecteren.
Als u objecten uit een verzameling wilt selecteren, gebruikt u de parameters Eerste, Laatste, Uniek, Overslaan en Index . Als u objecteigenschappen wilt selecteren, gebruikt u de parameter Eigenschap . Wanneer u eigenschappen selecteert, Select-Object
worden nieuwe objecten geretourneerd die alleen de opgegeven eigenschappen hebben.
Vanaf Windows PowerShell 3.0 Select-Object
bevat een optimalisatiefunctie die voorkomt dat opdrachten objecten maken en verwerken die niet worden gebruikt.
Wanneer u Select-Object
gebruikt met de parameters First of Index in een opdrachtpijplijn, stopt PowerShell de opdracht waarmee de objecten worden gegenereerd zodra het geselecteerde aantal objecten is bereikt. Als u dit optimalisatiegedrag wilt uitschakelen, gebruikt u de parameter Wait .
Voorbeelden
Voorbeeld 1: Objecten selecteren op eigenschap
In dit voorbeeld worden objecten gemaakt met de eigenschappen Naam, Id en Werkset (WS) van procesobjecten.
Get-Process | Select-Object -Property ProcessName, Id, WS
Voorbeeld 2: objecten selecteren op eigenschap en de resultaten opmaken
In dit voorbeeld wordt informatie opgehaald over de modules die worden gebruikt door de processen op de computer. Er wordt een cmdlet gebruikt Get-Process
om het proces op de computer op te halen.
De cmdlet wordt gebruikt Select-Object
om een matrix van [System.Diagnostics.ProcessModule]
exemplaren uit te voeren zoals opgenomen in de eigenschap Modules van elke System.Diagnostics.Process
instantie-uitvoer door Get-Process
.
De parameter Eigenschap van de Select-Object
cmdlet selecteert de procesnamen. Hiermee voegt u een ProcessName
NoteProperty toe aan elk [System.Diagnostics.ProcessModule]
exemplaar en wordt deze gevuld met de waarde van de eigenschap ProcessName van het huidige proces.
Ten slotte wordt Format-List
de cmdlet gebruikt om de naam en modules van elk proces in een lijst weer te geven.
Get-Process Explorer |
Select-Object -Property ProcessName -ExpandProperty Modules |
Format-List
ProcessName : explorer
ModuleName : explorer.exe
FileName : C:\WINDOWS\explorer.exe
BaseAddress : 140697278152704
ModuleMemorySize : 3919872
EntryPointAddress : 140697278841168
FileVersionInfo : File: C:\WINDOWS\explorer.exe
InternalName: explorer
OriginalFilename: EXPLORER.EXE.MUI
FileVersion: 10.0.17134.1 (WinBuild.160101.0800)
FileDescription: Windows Explorer
Product: Microsoft Windows Operating System
ProductVersion: 10.0.17134.1
...
Voorbeeld 3: processen selecteren die het meeste geheugen gebruiken
In dit voorbeeld worden de vijf processen ophaalt die het meeste geheugen gebruiken. De Get-Process
cmdlet haalt de processen op de computer op. De Sort-Object
cmdlet sorteert de processen op basis van geheugengebruik (werkset) en de Select-Object
cmdlet selecteert alleen de laatste vijf leden van de resulterende matrix met objecten.
De parameter Wait is niet vereist in opdrachten die de Sort-Object
cmdlet bevatten, omdat Sort-Object
alle objecten worden verwerkt en vervolgens een verzameling wordt geretourneerd. De Select-Object
optimalisatie is alleen beschikbaar voor opdrachten die objecten afzonderlijk retourneren wanneer ze worden verwerkt.
Get-Process | Sort-Object -Property WS | Select-Object -Last 5
Handles NPM(K) PM(K) WS(K) VS(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
2866 320 33432 45764 203 222.41 1292 svchost
577 17 23676 50516 265 50.58 4388 WINWORD
826 11 75448 76712 188 19.77 3780 Ps
1367 14 73152 88736 216 61.69 676 Ps
1612 44 66080 92780 380 900.59 6132 INFOPATH
Voorbeeld 4: Unieke tekens uit een matrix selecteren
In dit voorbeeld wordt de parameter Uniek van Select-Object
gebruikt om unieke tekens op te halen uit een matrix met tekens.
"a","b","c","a","a","a" | Select-Object -Unique
a
b
c
Voorbeeld 5: '-Unique' gebruiken met andere parameters
De parameter Uniek filtert waarden nadat andere Select-Object
parameters zijn toegepast. Als u bijvoorbeeld de parameter First gebruikt om het eerste aantal items in een matrix te selecteren, wordt Uniek alleen toegepast op de geselecteerde waarden en niet op de hele matrix.
"a","a","b","c" | Select-Object -First 2 -Unique
a
In dit voorbeeld selecteert "a","a"
First als de eerste 2 items in de matrix. Uniek wordt toegepast op "a","a"
en retourneert a
als de unieke waarde.
Voorbeeld 6: De nieuwste en oudste gebeurtenissen selecteren in het gebeurtenislogboek
In dit voorbeeld worden de eerste (nieuwste) en laatste (oudste) gebeurtenissen in het gebeurtenislogboek Windows PowerShell.
Get-WinEvent
haalt alle gebeurtenissen in het logboek van de Windows PowerShell op en slaat deze op in de $a
variabele.
$a
Vervolgens wordt doorgesluisd naar de Select-Object
cmdlet. De Select-Object
opdracht gebruikt de parameter Index om gebeurtenissen te selecteren uit de matrix met gebeurtenissen in de $a
variabele. De index van de eerste gebeurtenis is 0. De index van de laatste gebeurtenis is het aantal items in $a
min 1.
$a = Get-WinEvent -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($a.count - 1)
Voorbeeld 7: alle objecten behalve het eerste object selecteren
In dit voorbeeld wordt een nieuwe PSSession gemaakt op elk van de computers die worden vermeld in de Servers.txt-bestanden, met uitzondering van de eerste.
Select-Object
selecteert alle computers behalve de eerste computer in een lijst met computernamen. De resulterende lijst met computers wordt ingesteld als de waarde van de parameter ComputerName van de New-PSSession
cmdlet.
New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)
Voorbeeld 8: de naam van bestanden wijzigen en een aantal bestanden selecteren om te controleren
In dit voorbeeld wordt het achtervoegsel '-ro' toegevoegd aan de basisnamen van tekstbestanden met het kenmerk Alleen-lezen en worden vervolgens de eerste vijf bestanden weergegeven, zodat de gebruiker een voorbeeld van het effect kan zien.
Get-ChildItem
gebruikt de dynamische parameter ReadOnly om alleen-lezenbestanden op te halen. De resulterende bestanden worden doorgesluisd naar de Rename-Item
cmdlet, die de naam van het bestand wijzigt. De parameter PassThru van Rename-Item
wordt gebruikt om de hernoemde bestanden te verzenden naar de Select-Object
cmdlet, die de eerste 5 selecteert voor weergave.
De parameter Wait van Select-Object
voorkomt dat PowerShell de Get-ChildItem
cmdlet stopt nadat de eerste vijf alleen-lezen tekstbestanden zijn opgehaald. Zonder deze parameter worden alleen de eerste vijf alleen-lezen bestanden hernoemd.
Get-ChildItem *.txt -ReadOnly |
Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru |
Select-Object -First 5 -Wait
Voorbeeld 9: de complexiteit van de parameter -ExpandProperty weergeven
In dit voorbeeld ziet u de complexiteit van de parameter ExpandProperty .
Houd er rekening mee dat de gegenereerde uitvoer een matrix van [System.Int32]
exemplaren is. De exemplaren voldoen aan de standaardopmaakregels van de uitvoerweergave. Dit geldt voor alle uitgevouwen eigenschappen. Als de uitgevoerde objecten een specifieke standaardindeling hebben, is de uitgevouwen eigenschap mogelijk niet zichtbaar.
# Create a custom object to use for the Select-Object example.
$object = [pscustomobject]@{Name="CustomObject";Expand=@(1,2,3,4,5)}
# Use the ExpandProperty parameter to Expand the property.
$object | Select-Object -ExpandProperty Expand -Property Name
1
2
3
4
5
# The output did not contain the Name property, but it was added successfully.
# Use Get-Member to confirm the Name property was added and populated.
$object | Select-Object -ExpandProperty Expand -Property Name | Get-Member
TypeName: System.Int32
Name MemberType Definition
---- ---------- ----------
CompareTo Method int CompareTo(System.Object value), int CompareTo(int value), ...
Equals Method bool Equals(System.Object obj), bool Equals(int obj), bool IEq...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
GetTypeCode Method System.TypeCode GetTypeCode(), System.TypeCode IConvertible.Ge...
ToBoolean Method bool IConvertible.ToBoolean(System.IFormatProvider provider)
ToByte Method byte IConvertible.ToByte(System.IFormatProvider provider)
ToChar Method char IConvertible.ToChar(System.IFormatProvider provider)
ToDateTime Method datetime IConvertible.ToDateTime(System.IFormatProvider provider)
ToDecimal Method decimal IConvertible.ToDecimal(System.IFormatProvider provider)
ToDouble Method double IConvertible.ToDouble(System.IFormatProvider provider)
ToInt16 Method int16 IConvertible.ToInt16(System.IFormatProvider provider)
ToInt32 Method int IConvertible.ToInt32(System.IFormatProvider provider)
ToInt64 Method long IConvertible.ToInt64(System.IFormatProvider provider)
ToSByte Method sbyte IConvertible.ToSByte(System.IFormatProvider provider)
ToSingle Method float IConvertible.ToSingle(System.IFormatProvider provider)
ToString Method string ToString(), string ToString(string format), string ToS...
ToType Method System.Object IConvertible.ToType(type conversionType, System...
ToUInt16 Method uint16 IConvertible.ToUInt16(System.IFormatProvider provider)
ToUInt32 Method uint32 IConvertible.ToUInt32(System.IFormatProvider provider)
ToUInt64 Method uint64 IConvertible.ToUInt64(System.IFormatProvider provider)
Name NoteProperty string Name=CustomObject
Voorbeeld 10: aangepaste eigenschappen voor objecten Creatie
In het volgende voorbeeld ziet u het gebruik Select-Object
om een aangepaste eigenschap toe te voegen aan een object.
Wanneer u een eigenschapsnaam opgeeft die niet bestaat, Select-Object
maakt u die eigenschap als een NoteProperty voor elk object dat wordt doorgegeven.
$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject
MyCustomProperty
----------------
New Custom Property
Voorbeeld 11: berekende eigenschappen Creatie voor elk InputObject
In dit voorbeeld ziet u het gebruik Select-Object
om berekende eigenschappen toe te voegen aan uw invoer. Als u een ScriptBlock doorgeeft aan de parameter Property , wordt Select-Object
de expressie geëvalueerd voor elk object dat wordt doorgegeven en worden de resultaten toegevoegd aan de uitvoer. In het ScriptBlock kunt u de $_
variabele gebruiken om te verwijzen naar het huidige object in de pijplijn.
Select-Object
Standaard wordt de tekenreeks ScriptBlock gebruikt als de naam van de eigenschap. Met behulp van een hashtable kunt u de uitvoer van uw ScriptBlock labelen als een aangepaste eigenschap die aan elk object is toegevoegd. U kunt meerdere berekende eigenschappen toevoegen aan elk object dat wordt doorgegeven aan Select-Object
.
# Create a calculated property called $_.StartTime.DayOfWeek
Get-Process | Select-Object -Property ProcessName,{$_.StartTime.DayOfWeek}
ProcessName $_.StartTime.DayOfWeek
---- ----------------------
alg Wednesday
ati2evxx Wednesday
ati2evxx Thursday
...
# Add a custom property to calculate the size in KiloBytes of each FileInfo
# object you pass in. Use the pipeline variable to divide each file's length by
# 1 KiloBytes
$size = @{label="Size(KB)";expression={$_.length/1KB}}
# Create an additional calculated property with the number of Days since the
# file was last accessed. You can also shorten the key names to be 'l', and 'e',
# or use Name instead of Label.
$days = @{l="Days";e={((Get-Date) - $_.LastAccessTime).Days}}
# You can also shorten the name of your label key to 'l' and your expression key
# to 'e'.
Get-ChildItem $PSHOME -File | Select-Object Name, $size, $days
Name Size(KB) Days
---- -------- ----
Certificate.format.ps1xml 12.5244140625 223
Diagnostics.Format.ps1xml 4.955078125 223
DotNetTypes.format.ps1xml 134.9833984375 223
Voorbeeld 12: hashtabelsleutels selecteren zonder berekende eigenschappen te gebruiken
Vanaf PowerShell 6 Select-Object
ondersteunt het selecteren van de sleutels van hashtable-invoer als eigenschappen. In het volgende voorbeeld worden de weight
sleutels en name
op een invoerhashtabel geselecteerd en wordt de uitvoer weergegeven.
@{ name = 'a' ; weight = 7 } | Select-Object -Property name, weight
name weight
---- ------
a 7
Parameters
-ExcludeProperty
Hiermee geeft u de eigenschappen op die deze cmdlet uitsluit van de bewerking. Jokertekens zijn toegestaan.
Vanaf PowerShell 6 is het niet meer nodig om de parameter Property op te nemen om ExcludeProperty te laten werken.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-ExpandProperty
Hiermee geeft u een eigenschap op die moet worden geselecteerd en wordt aangegeven dat er een poging moet worden gedaan om die eigenschap uit te vouwen. Als de pijplijn van het invoerobject niet de eigenschap met de naam heeft, Select-Object
wordt een fout geretourneerd.
- Als de opgegeven eigenschap een matrix is, wordt elke waarde van de matrix opgenomen in de uitvoer.
- Als de opgegeven eigenschap een object is, worden de eigenschappen van de objecten uitgebreid voor elk InputObject
In beide gevallen komt het type van de uitvoerobjecten overeen met het type van de uitgevouwen eigenschap.
Als de parameter Property is opgegeven, Select-Object
wordt geprobeerd om elke geselecteerde eigenschap als een NoteProperty toe te voegen aan elk uitgevoerd object.
Waarschuwing
Als u een foutbericht ontvangt dat een eigenschap niet kan worden verwerkt omdat er al een eigenschap met die naam bestaat, kunt u rekening houden met het volgende. Houd er rekening mee dat wanneer u ExpandProperty gebruikt, Select-Object
een bestaande eigenschap niet kan vervangen. Dit betekent:
- Als het uitgevouwen object een eigenschap met dezelfde naam heeft, retourneert de opdracht een fout.
- Als het geselecteerde object een eigenschap heeft met dezelfde naam als de eigenschap van een uitgebreid object, retourneert de opdracht een fout.
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-First
Hiermee geeft u het aantal objecten te selecteren aan het begin van een matrix van invoerobjecten.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Index
Hiermee selecteert u objecten uit een matrix op basis van hun indexwaarden. Voer de indexen in een door komma's gescheiden lijst in. Indexen in een matrix beginnen met 0, waarbij 0 de eerste waarde en (n-1) de laatste waarde vertegenwoordigt.
Type: | Int32[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Hiermee geeft u objecten op die via de pijplijn naar de cmdlet moeten worden verzonden. Met deze parameter kunt u objecten doorsluizen naar Select-Object
.
Wanneer u objecten doorgeeft aan de parameter InputObject in plaats van de pijplijn te gebruiken, Select-Object
wordt het InputObject als één object behandeld, zelfs als de waarde een verzameling is. Het wordt aanbevolen om de pijplijn te gebruiken bij het doorgeven van verzamelingen aan Select-Object
.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Last
Hiermee geeft u het aantal objecten te selecteren aan het einde van een matrix met invoerobjecten.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Property
Hiermee geeft u de eigenschappen te selecteren. Deze eigenschappen worden als NoteProperty-leden toegevoegd aan de uitvoerobjecten. Jokertekens zijn toegestaan. Als het invoerobject niet de eigenschap met de naam heeft, wordt de waarde van de nieuwe NoteProperty ingesteld op $null
.
De waarde van de parameter Eigenschap kan een nieuwe berekende eigenschap zijn. Als u een berekende eigenschap wilt maken, gebruikt u een hash-tabel.
Geldige sleutels zijn:
- Naam (of label) -
<string>
- Expressie -
<string>
of<script block>
Zie about_Calculated_Properties voor meer informatie.
Type: | Object[] |
Position: | 0 |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-Skip
Slaat het opgegeven aantal items over (selecteert deze niet). Standaard telt de parameter Skip vanaf het begin van de verzameling objecten. Als de opdracht de laatste parameter gebruikt, wordt deze geteld vanaf het einde van de verzameling.
In tegenstelling tot de indexparameter , die begint met tellen bij 0, begint de parameter Skip bij 1.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SkipIndex
Slaat de objecten uit een matrix over (selecteert deze niet) op basis van hun indexwaarden. Voer de indexen in een door komma's gescheiden lijst in. Indexen in een matrix beginnen met 0, waarbij 0 de eerste waarde en (n-1) de laatste waarde vertegenwoordigt.
Deze parameter is geïntroduceerd in Windows PowerShell 6.0.
Type: | Int32[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SkipLast
Slaat het opgegeven aantal items aan het einde van de lijst of matrix over (selecteert deze niet). Werkt op dezelfde manier als het gebruik van Overslaan samen met de laatste parameter.
In tegenstelling tot de parameter Index , die begint met tellen bij 0, begint de parameter SkipLast bij 1.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Unique
Hiermee geeft u op dat als een subset van de invoerobjecten identieke eigenschappen en waarden heeft, slechts één lid van de subset moet worden geselecteerd.
Uniek selecteert waarden nadat andere filterparameters zijn toegepast.
Deze parameter is hoofdlettergevoelig. Als gevolg hiervan worden tekenreeksen die alleen verschillen in hoofdletters als uniek beschouwd.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Wait
Geeft aan dat de cmdlet optimalisatie uitschakelt. PowerShell voert opdrachten uit in de volgorde waarin ze worden weergegeven in de opdrachtpijplijn en laat ze alle objecten genereren. Als u een Select-Object
opdracht met de parameters First of Index opneemt in een opdrachtpijplijn, stopt PowerShell standaard de opdracht waarmee de objecten worden gegenereerd zodra het geselecteerde aantal objecten wordt gegenereerd.
Deze parameter is geïntroduceerd in Windows PowerShell 3.0.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Invoerwaarden
U kunt objecten doorsnijden naar deze cmdlet.
Uitvoerwaarden
Deze cmdlet retourneert de invoerobjecten met alleen de geselecteerde eigenschappen.
Notities
PowerShell bevat de volgende aliassen voor Select-Object
:
- Alle platformen:
select
De optimalisatiefunctie van Select-Object
is alleen beschikbaar voor opdrachten die objecten naar de pijplijn schrijven terwijl ze worden verwerkt. Het heeft geen invloed op opdrachten die verwerkte objecten bufferen en deze als een verzameling schrijven. Het onmiddellijk schrijven van objecten is een aanbevolen procedure voor het ontwerpen van cmdlets. Zie Write Single Records to the Pipeline (Enkelvoudige records schrijven naar de pijplijn ) in Sterk aangemoedigde ontwikkelrichtlijnen voor meer informatie.