Select-Object
Hiermee selecteert u objecten of objecteigenschappen.
Syntaxis
Select-Object
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-Last <Int32>]
[-First <Int32>]
[-Skip <Int32>]
[-Wait]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-SkipLast <Int32>]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[-Unique]
[-Wait]
[-Index <Int32[]>]
[<CommonParameters>]
Description
De Select-Object
cmdlet selecteert de opgegeven eigenschappen van een object of set objecten.
Het kan ook unieke objecten, een opgegeven aantal objecten of objecten in een opgegeven positie in een matrix selecteren.
Als u objecten uit een verzameling wilt selecteren, gebruikt u de First, Last, Unique, Skipen Index parameters. Als u objecteigenschappen wilt selecteren, gebruikt u de parameter Eigenschap.
Wanneer u eigenschappen selecteert, retourneert Select-Object
nieuwe objecten met alleen de opgegeven eigenschappen.
Vanaf Windows PowerShell 3.0 bevat Select-Object
een optimalisatiefunctie waarmee opdrachten geen objecten kunnen maken en verwerken die niet worden gebruikt.
Wanneer u een Select-Object
opdracht opneemt met de First of Index parameters in een opdrachtpijplijn, stopt PowerShell de opdracht waarmee de objecten worden gegenereerd zodra het geselecteerde aantal objecten wordt gegenereerd, zelfs wanneer de opdracht waarmee de objecten worden gegenereerd, wordt weergegeven vóór de Select-Object
opdracht in de pijplijn.
Als u dit optimalisatiegedrag wilt uitschakelen, gebruikt u de parameter Wait.
Voorbeelden
Voorbeeld 1: Objecten selecteren op eigenschap
Met deze opdracht maakt u objecten met de eigenschappen Name, IDen werkset (WS) van procesobjecten.
Get-Process | Select-Object -Property ProcessName, Id, WS
Voorbeeld 2: Objecten selecteren op eigenschap en de resultaten opmaken
Met deze opdracht wordt informatie opgehaald over de modules die door de processen op de computer worden gebruikt.
Er wordt Get-Process
cmdlet gebruikt om het proces op de computer op te halen.
De cmdlet Select-Object
wordt gebruikt om een matrix van [System.Diagnostics.ProcessModule]
exemplaren uit te voeren, zoals opgenomen in de eigenschap Modules van elke System.Diagnostics.Process
exemplaaruitvoer door Get-Process
.
De opdracht gebruikt de eigenschap parameter van de Select-Object
cmdlet om de procesnamen te selecteren. Hiermee voegt u een ProcessName
NoteProperty
toe aan elke [System.Diagnostics.ProcessModule]
instantie en vult u deze in met de waarde van de huidige processen eigenschap ProcessName.
De opdracht maakt gebruik van de cmdlet Format-List
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
Met deze opdracht 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 het 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 verwerkt en vervolgens een verzameling retourneert.
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
Met deze opdracht wordt de parameter Unique 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: Nieuwste en oudste gebeurtenissen selecteren in het gebeurtenislogboek
Met deze opdrachten worden de eerste (nieuwste) en laatste (oudste) gebeurtenissen in het Windows PowerShell-gebeurtenislogboek weergegeven.
De opdracht maakt gebruik van de Get-EventLog
cmdlet om alle gebeurtenissen op te halen in het Windows PowerShell-logboek.
Deze worden opgeslagen in de variabele $a
.
De tweede opdracht maakt gebruik van een pijplijnoperator (|) om de gebeurtenissen in $a
te verzenden naar de Select-Object
-cmdlet.
De opdracht Select-Object
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-EventLog -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($A.count - 1)
Voorbeeld 6: Alles behalve het eerste object selecteren
Met deze opdracht maakt u een nieuwe PSSession op elk van de computers die worden vermeld in de Servers.txt bestanden, met uitzondering van de eerste.
Met deze opdracht wordt de cmdlet Select-Object
gebruikt om alle computers behalve de eerste computer in een lijst met computernamen te selecteren.
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 7: De naam van bestanden wijzigen en een aantal selecteren om te controleren
Met deze opdracht wordt een 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.
De opdracht maakt gebruik van de dynamische parameter ReadOnly van de Get-ChildItem
voor filesystem-cmdlet om alleen-lezenbestanden op te halen.
Er wordt een pijplijnoperator (|) gebruikt om de bestanden te verzenden naar de cmdlet Rename-Item
, waarmee de naam van het bestand wordt gewijzigd.
Hierbij wordt de parameter Passthru van Rename-Item
gebruikt om de hernoemde bestanden te verzenden naar de Select-Object
-cmdlet, waarmee de eerste 5 voor weergave wordt geselecteerd.
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-lezenbestanden hernoemd.
Get-ChildItem *.txt -ReadOnly | Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru | Select-Object -First 5 -Wait
Voorbeeld 8: De complexiteit van de parameter -ExpandProperty demonstreren
In dit voorbeeld ziet u de complexiteit van de parameter ExpandProperty.
De gegenereerde uitvoer is een matrix van [System.Int32]
exemplaren. De exemplaren voldoen aan de standaardopmaakregels van de uitvoerweergave.
Dit geldt voor alle eigenschappen van Uitgevouwen. Als de uitvoerobjecten 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), int IComparable.CompareTo(System.Object obj)...
Equals Method bool Equals(System.Object obj), bool Equals(int obj), bool IEquatable[int].Equals(int other)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
GetTypeCode Method System.TypeCode GetTypeCode(), System.TypeCode IConvertible.GetTypeCode()
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 ToString(System.IFormatProvider provider)...
ToType Method System.Object IConvertible.ToType(type conversionType, System.IFormatProvider provider)
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 9: Aangepaste eigenschappen voor objecten maken
In het volgende voorbeeld ziet u hoe u Select-Object
gebruikt om een aangepaste eigenschap toe te voegen aan een object.
Wanneer u een eigenschapsnaam opgeeft die niet bestaat, maakt Select-Object
die eigenschap als een NoteProperty- voor elk doorgegeven object.
$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject
MyCustomProperty
----------------
New Custom Property
Voorbeeld 10: Berekende eigenschappen maken voor elk InputObject
In dit voorbeeld ziet u hoe u Select-Object
gebruikt om berekende eigenschappen toe te voegen aan uw invoer.
Door een ScriptBlock- door te geven aan de parameter eigenschap zorgt ervoor dat Select-Object
de expressie voor elk doorgegeven object evalueert en de resultaten toevoegt aan de uitvoer. In de ScriptBlock-kunt u de $_
variabele gebruiken om te verwijzen naar het huidige object in de pijplijn.
Standaard gebruikt Select-Object
de ScriptBlock tekenreeks 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
Parameters
-ExcludeProperty
Hiermee geeft u de eigenschappen op die door deze cmdlet worden uitgesloten van de bewerking. Jokertekens zijn toegestaan. Deze parameter is alleen van kracht wanneer de opdracht ook de eigenschap parameter bevat.
Type: | String[] |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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 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 objecten uitgevouwen voor elke InputObject
In beide gevallen komt de Type van de uitvoer van objecten overeen met de Type van de uitgevouwen eigenschap.
Als de parameter eigenschap is opgegeven, probeert Select-Object
elke geselecteerde eigenschap toe te voegen als een NoteProperty- aan elk uitgevoerd object.
Waarschuwing
Als u de fout krijgt: Selecteren: Eigenschap kan niet worden verwerkt omdat de eigenschap <PropertyName>
al bestaat, kunt u het volgende overwegen.
Houd er rekening mee dat wanneer u -ExpandProperty
gebruikt, Select-Object
een bestaande eigenschap niet kan vervangen.
Dit betekent:
- Als het uitgebreide object een eigenschap van dezelfde naam heeft, treedt er een fout op.
- Als het geselecteerd object een eigenschap van dezelfde naam heeft als een eigenschap uitgevouwen objecten, treedt er een fout op.
Type: | String |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-First
Hiermee geeft u het aantal objecten dat moet worden geselecteerd vanaf het begin van een matrix met invoerobjecten.
Type: | Int32 |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | 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 vertegenwoordigt en (n-1) de laatste waarde vertegenwoordigt.
Type: | Int32[] |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-InputObject
Hiermee geeft u objecten te verzenden naar de cmdlet via de pijplijn.
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, behandelt Select-Object
het InputObject als één object, 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 |
Vereist: | False |
Pijplijninvoer accepteren: | True |
Jokertekens accepteren: | False |
-Last
Hiermee geeft u het aantal objecten op dat moet worden geselecteerd aan het einde van een matrix met invoerobjecten.
Type: | Int32 |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-Property
Hiermee geeft u de eigenschappen die u wilt selecteren. Deze eigenschappen worden toegevoegd als NoteProperty leden aan de uitvoerobjecten. Jokertekens zijn toegestaan.
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>
Type: | Object[] |
Position: | 0 |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | True |
-Skip
Slaat het opgegeven aantal items over (selecteert niet). Standaard telt de parameteraantallen overslaan vanaf het begin van de matrix of lijst met objecten, maar als de opdracht gebruikmaakt van de parameter Laatste, telt deze vanaf het einde van de lijst of matrix.
In tegenstelling tot de parameter Index, die begint met tellen bij 0, begint de parameter Skip bij 1.
Type: | Int32 |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-SkipLast
Slaat het opgegeven aantal items aan het einde van de lijst of matrix over (selecteert niet). Werkt op dezelfde manier als het gebruik van Skip samen met parameter Last.
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 |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-Unique
Hiermee geeft u op dat als een subset van de invoerobjecten identieke eigenschappen en waarden heeft, slechts één lid van de subset wordt geselecteerd.
Deze parameter is hoofdlettergevoelig. Als gevolg hiervan worden tekenreeksen die alleen verschillen in tekenbehuizing als uniek beschouwd.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
-Wait
Geeft aan dat de cmdlet optimalisatie uitschakelt.
PowerShell voert opdrachten uit in de volgorde waarin ze worden weergegeven in de opdrachtpijplijn en kunnen alle objecten genereren.
Als u standaard een Select-Object
opdracht opneemt met de First of Index parameters in een opdrachtpijplijn, stopt PowerShell 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 |
Vereist: | False |
Pijplijninvoer accepteren: | False |
Jokertekens accepteren: | False |
Invoerwaarden
U kunt elk object doorslangen naar Select-Object
.
Uitvoerwaarden
Notities
- U kunt ook verwijzen naar de
Select-Object
cmdlet door de ingebouwde alias,select
. Zie about_Aliasesvoor meer informatie. - De optimalisatiefunctie van
Select-Object
is alleen beschikbaar voor opdrachten die objecten naar de pijplijn schrijven terwijl ze worden verwerkt. Het heeft geen effect op opdrachten die verwerkte objecten bufferen en ze als verzameling schrijven. Het direct schrijven van objecten is een aanbevolen procedure voor het ontwerpen van cmdlets. Zie Single Records schrijven naar de pijplijn in Sterk aangemoedigde ontwikkelingsrichtlijnen in de MSDN-bibliotheek voor meer informatie.