Select-Object
Markerar objekt eller objektegenskaper.
Syntax
Select-Object
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-CaseInsensitive]
[-Last <Int32>]
[-First <Int32>]
[-Skip <Int32>]
[-Wait]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[[-Property] <Object[]>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-CaseInsensitive]
[-Skip <Int32>]
[-SkipLast <Int32>]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[-Unique]
[-CaseInsensitive]
[-Wait]
[-Index <Int32[]>]
[<CommonParameters>]
Select-Object
[-InputObject <PSObject>]
[-Unique]
[-CaseInsensitive]
[-SkipIndex <Int32[]>]
[<CommonParameters>]
Description
Cmdleten Select-Object
väljer angivna egenskaper för ett objekt eller en uppsättning objekt. Den kan också välja unika objekt, ett angivet antal objekt eller objekt i en angiven position i en matris.
Om du vill välja objekt från en samling använder du parametrarna First, Last, Unique, Skip och Index . Om du vill välja objektegenskaper använder du parametern Egenskap . När du väljer egenskaper Select-Object
returnerar nya objekt som bara har de angivna egenskaperna.
Från och med Windows PowerShell 3.0 Select-Object
innehåller en optimeringsfunktion som förhindrar att kommandon skapar och bearbetar objekt som inte används.
När du använder Select-Object
med parametrarna First eller Index i en kommandopipeline stoppar PowerShell kommandot som genererar objekten så snart det valda antalet objekt har nåtts. Om du vill inaktivera det här optimeringsbeteendet använder du parametern Vänta .
Exempel
Exempel 1: Välj objekt efter egenskap
I det här exemplet skapas objekt som har egenskaperna Namn, ID och arbetsuppsättning (WS) för processobjekt.
Get-Process | Select-Object -Property ProcessName, Id, WS
Exempel 2: Välj objekt efter egenskap och formatera resultatet
Det här exemplet hämtar information om de moduler som används av processerna på datorn. Den använder Get-Process
cmdlet för att hämta processen på datorn.
Den använder cmdleten Select-Object
för att mata ut en matris med [System.Diagnostics.ProcessModule]
instanser som finns i modulegenskapen för varje System.Diagnostics.Process
instans som matas ut av Get-Process
.
Parametern Egenskap för cmdleten Select-Object
väljer processnamnen. Detta lägger till en ProcessName
NoteProperty till varje [System.Diagnostics.ProcessModule]
instans och fyller den med värdet för den aktuella processens ProcessName-egenskap .
Slutligen Format-List
används cmdlet för att visa namnet och modulerna för varje process i en lista.
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
...
Exempel 3: Välj processer med mest minne
Det här exemplet hämtar de fem processer som använder mest minne. Cmdleten Get-Process
hämtar processerna på datorn. Cmdleten Sort-Object
sorterar processerna efter minnesanvändning (arbetsuppsättning) och cmdleten Select-Object
väljer endast de fem sista medlemmarna i den resulterande matrisen med objekt.
Parametern Wait krävs inte i kommandon som innehåller cmdleten Sort-Object
eftersom Sort-Object
alla objekt bearbetas och sedan returneras en samling. Optimeringen Select-Object
är endast tillgänglig för kommandon som returnerar objekt individuellt när de bearbetas.
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
Exempel 4: Välj unika tecken från en matris
I det här exemplet används den unika parametern Select-Object
för för att hämta unika tecken från en matris med tecken.
"a","b","c","a","A","a" | Select-Object -Unique
a
b
c
A
Exempel 5: Använda "-Unik" med andra parametrar
Den unika parametern filtrerar värden efter att andra Select-Object
parametrar har tillämpats. Om du till exempel använder parametern First för att välja det första antalet objekt i en matris tillämpas Unique endast på de valda värdena och inte på hela matrisen.
"a","a","b","c" | Select-Object -First 2 -Unique
a
I det här exemplet väljer "a","a"
Först som de första två objekten i matrisen. Unikt tillämpas på "a","a"
och returnerar a
som det unika värdet.
Exempel 6: Välj unika strängar med parametern "-CaseInsensitive"
I det här exemplet används skiftlägesokänsliga jämförelser för att hämta unika strängar från en matris med strängar.
"aa", "Aa", "Bb", "bb" | Select-Object -Unique -CaseInsensitive
aa
Bb
Exempel 7: Välj de senaste och äldsta händelserna i händelseloggen
Det här exemplet hämtar de första (senaste) och sista (äldsta) händelserna i Windows PowerShell-händelseloggen.
Get-WinEvent
hämtar alla händelser i Windows PowerShell-loggen och sparar dem i variabeln $a
.
$a
Sedan skickas till cmdletenSelect-Object
. Kommandot Select-Object
använder parametern Index för att välja händelser från matrisen med händelser i variabeln $a
. Indexet för den första händelsen är 0. Indexet för den senaste händelsen är antalet objekt i $a
minus 1.
$a = Get-WinEvent -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($a.count - 1)
Exempel 8: Markera alla utom det första objektet
Det här exemplet skapar en ny PSSession på var och en av datorerna som anges i Servers.txt-filerna, förutom den första.
Select-Object
väljer alla utom den första datorn i en lista över datornamn. Den resulterande listan över datorer anges som värdet för parametern ComputerName för cmdleten New-PSSession
.
New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)
Exempel 9: Byt namn på filer och välj flera att granska
Det här exemplet lägger till suffixet "-ro" i basnamnen för textfiler som har det skrivskyddade attributet och visar sedan de första fem filerna så att användaren kan se ett exempel på effekten.
Get-ChildItem
använder den dynamiska parametern ReadOnly för att hämta skrivskyddade filer. De resulterande filerna skickas till cmdleten Rename-Item
, som byter namn på filen. Den använder parametern Rename-Item
PassThru för för att skicka de omdöpta filerna till cmdletenSelect-Object
, som väljer de första 5 för visning.
Parametern Wait för Select-Object
hindrar PowerShell från att stoppa cmdleten Get-ChildItem
när den hämtar de fem första skrivskyddade textfilerna. Utan den här parametern skulle endast de första fem skrivskyddade filerna byta namn.
Get-ChildItem *.txt -ReadOnly |
Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru |
Select-Object -First 5 -Wait
Exempel 10: Visa invecklingarna för parametern -ExpandProperty
Det här exemplet visar invecklingarna för parametern ExpandProperty .
Observera att utdata som genererades var en matris med [System.Int32]
instanser. Instanserna följer standardformateringsreglerna i utdatavyn. Detta gäller för alla expanderade egenskaper. Om utdataobjekten har ett specifikt standardformat kanske den expanderade egenskapen inte visas.
# 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
Exempel 11: Skapa anpassade egenskaper för objekt
I följande exempel visas hur du använder Select-Object
för att lägga till en anpassad egenskap i alla objekt.
När du anger ett egenskapsnamn som inte finns skapar Select-Object
du egenskapen som en NoteProperty för varje objekt som skickas.
$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject
MyCustomProperty
----------------
New Custom Property
Exempel 12: Skapa beräknade egenskaper för varje InputObject
Det här exemplet visar hur du använder Select-Object
för att lägga till beräknade egenskaper i dina indata. Om du skickar en ScriptBlock till egenskapsparametern utvärderas Select-Object
uttrycket för varje objekt som skickas och resultatet läggs till i utdata. I ScriptBlock kan du använda variabeln $_
för att referera till det aktuella objektet i pipelinen.
Som standard Select-Object
använder du ScriptBlock-strängen som namnet på egenskapen. Med hjälp av en Hashtable kan du märka utdata från ScriptBlock som en anpassad egenskap som läggs till i varje objekt. Du kan lägga till flera beräknade egenskaper för varje objekt som skickas till 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
Exempel 13: Välj hashtable-nycklar utan att använda beräknade egenskaper
Från och med PowerShell 6 Select-Object
har stöd för att välja nycklar för hashtable-indata som egenskaper. I följande exempel väljs weight
nycklarna och name
på en indata-hashtable och utdata visas.
@{ name = 'a' ; weight = 7 } | Select-Object -Property name, weight
name weight
---- ------
a 7
Exempel 14: ExpandProperty ändrar det ursprungliga objektet
Det här exemplet visar bieffekten av att använda parametern ExpandProperty . När du använder ExpandPropertySelect-Object
lägger du till de markerade egenskaperna i det ursprungliga objektet som NoteProperty-medlemmar.
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}
Som du ser lades landsegenskapen till i underordnade objekt efter att ha använt parametern ExpandProperty.
Exempel 15: Skapa ett nytt objekt med expanderade egenskaper utan att ändra indataobjektet
Du kan undvika bieffekten av att använda parametern ExpandProperty genom att skapa ett nytt objekt och kopiera egenskaperna från indataobjektet.
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}
Parametrar
-CaseInsensitive
När du använder den unika parametern använder cmdleten som standard skiftlägeskänsliga jämförelser. När du använder den här parametern använder cmdleten skiftlägesokänsliga jämförelser.
Den här parametern lades till i PowerShell 7.4.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | False |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-ExcludeProperty
Anger de egenskaper som den här cmdleten exkluderar från åtgärden. Jokertecken tillåts.
Från och med PowerShell 6 behöver du inte längre inkludera egenskapsparametern för att ExcludeProperty ska fungera.
Typ: | String[] |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | True |
-ExpandProperty
Anger en egenskap som ska väljas och anger att ett försök ska göras att expandera den egenskapen. Om indataobjektpipelinen inte har egenskapen med namnet Select-Object
returneras ett fel.
- Om den angivna egenskapen är en matris inkluderas varje värde för matrisen i utdata.
- Om den angivna egenskapen är ett objekt expanderas objektegenskaperna för varje InputObject
I båda fallen matchar utdataobjektens typ den expanderade egenskapens typ.
Kommentar
Det finns en bieffekt när du använder ExpandProperty. Select-Object
Lägger till de markerade egenskaperna i det ursprungliga objektet som NoteProperty-medlemmar.
Om egenskapsparametern anges Select-Object
försöker du lägga till varje vald egenskap som en NoteProperty till varje utdataobjekt.
Varning
Om du får ett felmeddelande om att en egenskap inte kan bearbetas eftersom det redan finns en egenskap med det namnet bör du överväga följande. Observera att när du använder ExpandProperty Select-Object
kan du inte ersätta en befintlig egenskap. Detta innebär att:
- Om det expanderade objektet har en egenskap med samma namn returnerar kommandot ett fel.
- Om det markerade objektet har en egenskap med samma namn som egenskapen Expanderat objekt returnerar kommandot ett fel.
Typ: | String |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-First
Anger antalet objekt som ska väljas från början av en matris med indataobjekt.
Typ: | Int32 |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-Index
Markerar objekt från en matris baserat på deras indexvärden. Ange indexen i en kommaavgränsad lista. Index i en matris börjar med 0, där 0 representerar det första värdet och (n-1) representerar det sista värdet.
Typ: | Int32[] |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-InputObject
Anger objekt som ska skickas till cmdleten via pipelinen. Med den här parametern kan du skicka objekt till Select-Object
.
När du skickar objekt till parametern InputObject behandlar i stället för att använda pipelinen Select-Object
InputObject som ett enskilt objekt, även om värdet är en samling. Vi rekommenderar att du använder pipelinen när du skickar samlingar till Select-Object
.
Typ: | PSObject |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | True |
Godkänn jokertecken: | False |
-Last
Anger antalet objekt som ska väljas från slutet av en matris med indataobjekt.
Typ: | Int32 |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-Property
Anger vilka egenskaper som ska väljas. Dessa egenskaper läggs till som NoteProperty-medlemmar i utdataobjekten. Jokertecken tillåts. Om indataobjektet inte har egenskapen med namnet är värdet för den nya NoteProperty inställt på $null
.
Värdet för egenskapsparametern kan vara en ny beräknad egenskap. Om du vill skapa en beräknad egenskap använder du en hash-tabell.
Giltiga nycklar är:
- Namn (eller etikett) -
<string>
- Uttryck –
<string>
eller<script block>
Mer information finns i about_Calculated_Properties.
Typ: | Object[] |
Position: | 0 |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | True |
-Skip
Hoppar över (väljer inte) det angivna antalet objekt. Som standard räknas parametern Hoppa över från början av samlingen med objekt. Om kommandot använder parametern Last räknas den från slutet av samlingen.
Till skillnad från indexparametern, som börjar räkna vid 0, börjar parametern Hoppa över vid 1.
Från och med PowerShell 7.4 kan du använda parametern Hoppa över med parametern SkipLast för att hoppa över objekt från både början och slutet av samlingen.
Typ: | Int32 |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-SkipIndex
Hoppar över (väljer inte) objekten från en matris baserat på deras indexvärden. Ange indexen i en kommaavgränsad lista. Index i en matris börjar med 0, där 0 representerar det första värdet och (n-1) representerar det sista värdet.
Den här parametern introducerades i Windows PowerShell 6.0.
Typ: | Int32[] |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-SkipLast
Hoppar över (väljer inte) det angivna antalet objekt från slutet av listan eller matrisen. Fungerar på samma sätt som när du använder Hoppa över tillsammans med den sista parametern.
Till skillnad från indexparametern, som börjar räkna vid 0, börjar parametern SkipLast vid 1.
Från och med PowerShell 7.4 kan du använda parametern Hoppa över med parametern SkipLast för att hoppa över objekt från både början och slutet av samlingen.
Typ: | Int32 |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-Unique
Anger att om en delmängd av indataobjekten har identiska egenskaper och värden ska endast en enskild medlem i delmängden väljas.
Unika värden väljs efter att andra filtreringsparametrar har tillämpats.
Den här parametern är skiftlägeskänslig. Därför anses strängar som endast skiljer sig åt i teckenhöljet vara unika. Lägg till parametern CaseInsensitive för att utföra skiftlägesokänsliga jämförelser.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
-Wait
Anger att cmdleten inaktiverar optimering. PowerShell kör kommandon i den ordning de visas i kommandopipelinen och låter dem generera alla objekt. Om du som standard inkluderar ett Select-Object
kommando med parametrarna First eller Index i en kommandopipeline stoppar PowerShell kommandot som genererar objekten så snart det valda antalet objekt genereras.
Den här parametern introducerades i Windows PowerShell 3.0.
Typ: | SwitchParameter |
Position: | Named |
Standardvärde: | None |
Obligatorisk: | False |
Godkänn pipeline-indata: | False |
Godkänn jokertecken: | False |
Indata
Du kan skicka objekt till den här cmdleten.
Utdata
Den här cmdleten returnerar indataobjekten med endast de valda egenskaperna.
Kommentarer
PowerShell innehåller följande alias för Select-Object
:
- Alla plattformar:
select
Optimeringsfunktionen Select-Object
i är endast tillgänglig för kommandon som skriver objekt till pipelinen när de bearbetas. Det påverkar inte kommandon som buffrar bearbetade objekt och skriver dem som en samling. Att skriva objekt omedelbart är en metod för cmdlet-design. Mer information finns i Skriva enskilda poster till pipelinen i riktlinjer för starkt uppmuntrad utveckling.