Select-Object

Markerar objekt eller objektegenskaper.

Syntax

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>]
Select-Object
      [-InputObject <PSObject>]
      [-Unique]
      [-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 på 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 returneras 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 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, även när kommandot som genererar objekten visas före Select-Object kommandot i pipelinen. Om du vill inaktivera det här optimeringsbeteendet använder du parametern Wait .

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 egenskapen Modules 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 ProcessNameNoteProperty 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 namn och moduler 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 som använder 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 enligt minnesanvändning (arbetsminne) och cmdleten Select-Object väljer endast de sista fem 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

Exempel 5: Använda "-Unique" 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 bara 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 returneras a som det unika värdet.

Exempel 6: 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-EventLoghämtar alla händelser i Windows PowerShell loggen och sparar dem i variabeln $a . $a Skickas sedan 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-EventLog -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($A.count - 1)

Exempel 7: Markera alla utom det första objektet

I det här exemplet skapas en ny PSSession på var och en av de datorer 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 8: 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 readOnly-parametern för att hämta skrivskyddade filer. De resulterande filerna skickas till cmdleten Rename-Item , som byter namn på filen. Den använder passthru-parameternRename-Item för för att skicka de omdöpta filerna till cmdleten Select-Object , som väljer de första 5 för visning.

Parametern Select-ObjectWait i hindrar PowerShell från att stoppa cmdleten Get-ChildItem när den har hämtat 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 9: 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 utökade egenskaper. Om de utgivna objekten 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), 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

Exempel 10: 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 den 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 11: 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 ScriptBlocktill 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 scriptblock-strängen som namnet på egenskapen. Med hjälp av en Hashtable kan du märka utdata för 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

Parametrar

-ExcludeProperty

Anger de egenskaper som denna cmdlet undantar 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.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-ExpandProperty

Anger en egenskap som ska väljas och anger att ett försök att expandera egenskapen ska göras.

  • Om den angivna egenskapen är en matris inkluderas varje värde i matrisen i utdata.
  • Om den angivna egenskapen är ett objekt expanderas objektegenskaperna för varje InputObject

I båda fallen matchar utdatatypen Typ av objekt typen av expanderad egenskap.

Om parametern Egenskap har angetts Select-Object försöker lägga till varje vald egenskap som en NoteProperty till varje utdataobjekt.

Varning

Om du får felet: Välj : Egenskapen kan inte bearbetas eftersom egenskapen <PropertyName> redan finns, bör du tänka på följande. Observera att när du använder -ExpandPropertykan inte ersätta Select-Object en befintlig egenskap. Det innebär att du måste:

  • Om det expanderade objektet har en egenskap med samma namn uppstår ett fel.
  • Om det valda objektet har en egenskap med samma namn som egenskapen Expanderade objekt uppstår ett fel.
Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-First

Anger antalet objekt som ska väljas från början av en matris med indataobjekt.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters: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.

Type:Int32[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters: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 InputObject i stället för att använda pipelinen Select-Object som ett enda objekt, även om värdet är en samling. Vi rekommenderar att du använder pipelinen när du skickar samlingar till Select-Object.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Last

Anger antalet objekt som ska väljas från slutet av en matris med indataobjekt.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Property

Anger vilka egenskaper som ska väljas. Dessa egenskaper läggs till som NoteProperty-medlemmar i utdataobjekten. Jokertecken tillåts.

Värdet för parametern Egenskap 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.

Type:Object[]
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Skip

Hoppar över (väljer inte) det angivna antalet objekt. Som standard räknas parametern Hoppa över från början av matrisen eller listan över objekt, men om kommandot använder parametern Last räknas den från slutet av listan eller matrisen.

Till skillnad från indexparametern , som börjar räkna vid 0, börjar parametern Hoppa över vid 1.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SkipIndex

Type:Int32[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SkipLast

Hoppar över (väljer inte) det angivna antalet objekt från slutet av listan eller matrisen. Fungerar på samma sätt som att använda 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.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Unique

Anger att om en delmängd av indataobjekten har identiska egenskaper och värden väljs endast en enskild medlem i delmängden.

Unika väljer värden när 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.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Wait

Anger att cmdleten inaktiverar optimering. PowerShell kör kommandon i den ordning som 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.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Indata

PSObject

Du kan skicka valfritt objekt till Select-Object.

Utdata

PSObject

Kommentarer

  • Du kan också referera till cmdleten Select-Object med dess inbyggda alias, select. Mer information finns i about_Aliases.

  • 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 direkt är en metod för cmdlet-design. Mer information finns i Skriva enskilda poster till pipelinen i Starkt uppmuntrade riktlinjer för utveckling.