Delen via


Select-Object

Hiermee selecteert u objecten of objecteigenschappen.

Syntaxis

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>]

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 parameters First, Last, Unique, Skip 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 waarmee wordt voorkomen dat opdrachten objecten maken en verwerken die niet worden gebruikt.

Wanneer u met de parameters Eerste of Index in een opdrachtpijplijn werktSelect-Object, stopt PowerShell de opdracht waarmee de objecten worden gegenereerd zodra het geselecteerde aantal objecten is bereikt. Gebruik de parameter Wait om dit optimalisatiegedrag uit te schakelen.

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 door de processen op de computer worden gebruikt. Er wordt Get-Process gebruikgemaakt van de cmdlet om het proces op de computer op te halen.

Hierbij wordt de Select-Object cmdlet gebruikt om een matrix met [System.Diagnostics.ProcessModule] exemplaren uit te voeren, zoals opgenomen in de eigenschap Modules van elke System.Diagnostics.Process instantie-uitvoer door Get-Process.

De eigenschapsparameter van de Select-Object cmdlet selecteert de procesnamen. Hiermee wordt een ProcessName NoteProperty aan elk [System.Diagnostics.ProcessModule] exemplaar toegevoegd en wordt deze gevuld met de waarde van de eigenschap ProcessName van het huidige proces.

Format-List Ten slotte wordt 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 het geheugengebruik (werkset) en de Select-Object cmdlet selecteert alleen de laatste vijf leden van de resulterende matrix met objecten.

De wachtparameter 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 Select-Object Uniek 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 waarden van de unieke parameter worden gefilterd nadat andere Select-Object parameters zijn toegepast. Als u bijvoorbeeld de parameter Eerste 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 wordt eerst geselecteerd "a","a" als de eerste 2 items in de matrix. Uniek wordt toegepast "a","a" op en retourneert a als de unieke waarde.

Voorbeeld 6: Nieuwste en oudste gebeurtenissen selecteren in het gebeurtenislogboek

In dit voorbeeld worden de eerste (nieuwste) en laatste (oudste) gebeurtenissen in het Windows PowerShell-gebeurtenislogboek weergegeven.

Get-EventLog haalt alle gebeurtenissen op in het Windows PowerShell-logboek en slaat deze op in de $a variabele. Vervolgens wordt $a deze doorgesluisd naar de Select-Object cmdlet. De Select-Object opdracht maakt gebruik van de indexparameter 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 7: Alles 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 selecteren om te controleren

In dit voorbeeld 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.

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. Hierbij wordt de passThru-parameter gebruikt om Rename-Item de hernoemde bestanden naar de Select-Object cmdlet te verzenden, waarmee de eerste 5 voor weergave wordt geselecteerd.

Met de wachtparameter voorkomt Select-Object u 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 9: De complexiteit van de parameter -ExpandProperty weergeven

In dit voorbeeld ziet u de complexiteit van de parameter ExpandProperty .

De gegenereerde uitvoer is een matrix met [System.Int32] exemplaren. De exemplaren voldoen aan de standaardopmaakregels van de uitvoerweergave. Dit geldt voor uitgebreide eigenschappen. 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), ...
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 maken voor objecten

In het volgende voorbeeld ziet u hoe u Select-Object een aangepaste eigenschap toevoegt aan een object. Wanneer u een eigenschapsnaam opgeeft die niet bestaat, Select-Object maakt u 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 11: Berekende eigenschappen maken voor elk InputObject

In dit voorbeeld ziet u hoe u Select-Object berekende eigenschappen toevoegt aan uw invoer. Als u een ScriptBlock doorgeeft aan de parameter Eigenschap , wordt Select-Object de expressie voor elk doorgegeven object geëvalueerd en worden de resultaten aan de uitvoer toegevoegd. In scriptblock kunt u de $_ variabele gebruiken om te verwijzen naar het huidige object in de pijplijn.

Select-Object Standaard wordt de ScriptBlock-tekenreeks gebruikt als de naam van de eigenschap. Met behulp van een hashtabel 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: De sleutels van een hashtabel met berekende eigenschappen selecteren

In dit voorbeeld ziet u hoe u de sleutel-waardeparen van een hashtabelobject met berekende eigenschappen kunt Select-Object weergeven. Elke hashtabel voor berekende eigenschappen geeft het label van de nieuwe eigenschap op als de weergavenaam voor de sleutel en een expressie waarmee de waarde voor die sleutel wordt opgehaald.

@{ name = 'a' ; weight = 7 } | Select-Object -Property @(
    @{ label = 'Name' ; expression = { $_.name } }
    @{ label = 'Weight' ; expression = { $_.weight } }
)

Name Weight
---- ------
a         7

Voorbeeld 13: ExpandProperty wijzigt het oorspronkelijke object

In dit voorbeeld ziet u het neveneffect van het gebruik van de parameter ExpandProperty . Wanneer u ExpandProperty gebruikt, Select-Object voegt u de geselecteerde eigenschappen toe aan het oorspronkelijke object als NoteProperty-leden.

PS> $object = [PSCustomObject]@{
    name = 'USA'
    children = [PSCustomObject]@{
        name = 'Southwest'
    }
}
PS> $object

name children
---- --------
USA  @{name=Southwest}

# Use the ExpandProperty parameter to expand the children property
PS> $object | Select-Object @{n="country"; e={$_.name}} -ExpandProperty children

name      country
----      -------
Southwest USA

# The original object has been altered
PS> $object

name children
---- --------
USA  @{name=Southwest; country=USA}

Zoals u kunt zien, is de landeigenschap toegevoegd aan het onderliggende object nadat u de parameter ExpandProperty hebt gebruikt.

Voorbeeld 14: een nieuw object maken met uitgevouwen eigenschappen zonder het invoerobject te wijzigen

U kunt het neveneffect van het gebruik van de parameter ExpandProperty voorkomen door een nieuw object te maken en de eigenschappen van het invoerobject te kopiëren.

PS> $object = [PSCustomObject]@{
    name = 'USA'
    children = [PSCustomObject]@{
        name = 'Southwest'
    }
}
PS> $object

name children
---- --------
USA  @{name=Southwest}

# Create a new object with selected properties
PS> $newobject = [PSCustomObject]@{
    country = $object.name
    children = $object.children
}

PS> $newobject

country children
------- --------
USA     @{name=Southwest}

# $object remains unchanged
PS> $object

name children
---- --------
USA  @{name=Southwest}

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 eigenschapsparameter 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 pijplijn van het invoerobject niet de naam heeft van de eigenschap, 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 objecteigenschappen voor elk InputObject uitgevouwen

In beide gevallen komt het type van de uitvoerobjecten overeen met het type van de uitgebreide eigenschap.

Notitie

Er is een neveneffect bij het gebruik van ExpandProperty. Hiermee Select-Object worden de geselecteerde eigenschappen toegevoegd aan het oorspronkelijke object als NoteProperty-leden .

Als de parameter Eigenschap is opgegeven, Select-Object probeert u elke geselecteerde eigenschap toe te voegen als een NoteProperty aan elk uitgevoerd object.

Waarschuwing

Als er een foutbericht wordt weergegeven dat een eigenschap niet kan worden verwerkt omdat er al een eigenschap met die naam bestaat, kunt u het volgende overwegen. Houd er rekening mee dat bij het gebruik van ExpandPropertySelect-Object een bestaande eigenschap niet kan worden vervangen. Dit houdt in:

  • Als het uitgevouwen object een eigenschap van dezelfde naam heeft, retourneert de opdracht een fout.
  • Als het geselecteerde object een eigenschap van dezelfde naam heeft als de eigenschap van een uitgevouwen object, retourneert de opdracht een fout.
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 doorsluisen naar Select-Object.

Wanneer u objecten doorgeeft aan de parameter InputObject , in plaats van de pijplijn te gebruiken, Select-Object wordt het InputObject behandeld 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. Als het invoerobject niet de naam heeft van de eigenschap, 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
Vereist:False
Pijplijninvoer accepteren:False
Jokertekens accepteren:True

-Skip

Slaat het opgegeven aantal items over (selecteert niet). Standaard telt de parameter Skip vanaf het begin van de verzameling objecten. Als de opdracht gebruikmaakt van de laatste parameter, telt deze 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
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 de laatste parameter.

In tegenstelling tot de indexparameter , 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 moet worden geselecteerd.

Met unieke selecties worden waarden geselecteerd nadat andere filterparameters zijn toegepast.

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 parameters Eerste of Index 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

PSObject

U kunt objecten doorsluisen naar deze cmdlet.

Uitvoerwaarden

PSObject

Deze cmdlet retourneert de invoerobjecten met alleen de geselecteerde eigenschappen.

Notities

Windows PowerShell bevat de volgende aliassen voor Select-Object:

  • select

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 voor meer informatie.