Share via


Select-Object

Wählt Objekte oder Objekteigenschaften.

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

Beschreibung

Das Select-Object Cmdlet wählt die angegebenen Eigenschaften eines Objekts oder einer Gruppe von Objekten aus. Es kann auch eindeutige Objekte, eine angegebene Anzahl von Objekten oder Objekte in einer angegebenen Position in einem Array auswählen.

Um Objekte aus einer Sammlung auszuwählen, verwenden Sie die Parameter First, Last, Unique, Skip und Index. Verwenden Sie zum Auswählen von Objekteigenschaften den Property-Parameter. Wenn Sie Eigenschaften auswählen, werden neue Objekte zurückgegeben, Select-Object die nur über die angegebenen Eigenschaften verfügen.

Ab Windows PowerShell 3.0 enthält ein Optimierungsfeature, das verhindert, Select-Object dass Befehle nicht verwendete Objekte erstellen und verarbeiten.

Wenn Sie mit dem Parameter First oder Index in einer Befehlspipeline verwendenSelect-Object, beendet PowerShell den Befehl, der die Objekte generiert, sobald die ausgewählte Anzahl von Objekten erreicht ist. Um dieses Optimierungsverhalten zu deaktivieren, verwenden Sie den Wait-Parameter.

Beispiele

Beispiel 1: Auswählen von Objekten nach Eigenschaft

In diesem Beispiel werden Objekte erstellt, die über die Eigenschaften Name, ID und Working Set (WS) von Prozessobjekten verfügen.

Get-Process | Select-Object -Property ProcessName, Id, WS

Beispiel 2: Auswählen von Objekten nach Eigenschaft und Formatieren der Ergebnisse

In diesem Beispiel werden Informationen zu den Modulen abgerufen, die von den Prozessen auf dem Computer verwendet werden. Es wird ein Cmdlet verwendet Get-Process , um den Prozess auf dem Computer abzurufen.

Es verwendet das Select-Object Cmdlet, um ein Array von [System.Diagnostics.ProcessModule] Instanzen auszugeben, wie es in der Modules-Eigenschaft jedes System.Diagnostics.Process instance Ausgabe von Get-Processenthalten ist.

Der Parameter Property des Select-Object Cmdlets wählt die Prozessnamen aus. Dadurch wird jeder [System.Diagnostics.ProcessModule] instance eine ProcessNameNoteProperty hinzugefügt und mit dem Wert der ProcessName-Eigenschaft des aktuellen Prozesses aufgefüllt.

Schließlich wird das Cmdlet verwendet, Format-List um den Namen und die Module der einzelnen Prozesse in einer Liste anzuzeigen.

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

Beispiel 3: Auswählen von Prozessen, die den meisten Arbeitsspeicher verwenden

In diesem Beispiel werden die fünf Prozesse abgerufen, die den meisten Arbeitsspeicher verwenden. Das Get-Process Cmdlet ruft die Prozesse auf dem Computer ab. Das Sort-Object Cmdlet sortiert die Prozesse nach der Arbeitsspeicherauslastung (Arbeitssatz), und das Select-Object Cmdlet wählt nur die letzten fünf Elemente des resultierenden Arrays von Objekten aus.

Der Wait-Parameter ist in Befehlen, die das Sort-Object Cmdlet enthalten, nicht erforderlich, da Sort-Object alle Objekte verarbeitet und dann eine Auflistung zurückgegeben wird. Die Select-Object Optimierung ist nur für Befehle verfügbar, die Objekte einzeln zurückgeben, während sie verarbeitet werden.

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

Beispiel 4: Auswählen eindeutiger Zeichen aus einem Array

In diesem Beispiel wird der Unique-Parameter von Select-Object verwendet, um eindeutige Zeichen aus einem Zeichenarray abzurufen.

"a","b","c","a","a","a" | Select-Object -Unique

a
b
c

Beispiel 5: Verwenden von "-Unique" mit anderen Parametern

Der eindeutige Parameter filtert Werte, nachdem andere Select-Object Parameter angewendet wurden. Wenn Sie beispielsweise den Parameter First verwenden, um die erste Anzahl von Elementen in einem Array auszuwählen, wird Unique nur auf die ausgewählten Werte und nicht auf das gesamte Array angewendet.

"a","a","b","c" | Select-Object -First 2 -Unique

a

In diesem Beispiel wählt First als die ersten 2 Elemente im Array aus "a","a" . Unique wird auf angewendet "a","a" und gibt als eindeutigen Wert zurück a .

Beispiel 6: Auswählen der neuesten und ältesten Ereignisse im Ereignisprotokoll

In diesem Beispiel werden die ersten (neuesten) und letzten (ältesten) Ereignisse im Windows PowerShell Ereignisprotokolls abgerufen.

Get-WinEventruft alle Ereignisse im Windows PowerShell-Protokoll ab und speichert sie in der $a Variablen. Anschließend $a wird an das Select-Object Cmdlet weitergeleitet. Der Select-Object Befehl verwendet den Index-Parameter , um Ereignisse aus dem Array von Ereignissen in der $a Variablen auszuwählen. Der Index des ersten Ereignisses ist 0. Der Index des letzten Ereignisses ist die Anzahl der Elemente in $a minus 1.

$a = Get-WinEvent -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($a.count - 1)

Beispiel 7: Wählen Sie alle außer dem ersten Objekt aus.

In diesem Beispiel wird eine neue PSSession auf jedem der Computer erstellt, die in der Servers.txt-Dateien aufgeführt sind, mit Ausnahme des ersten.

Select-Object wählt alle Außer dem ersten Computer in einer Liste von Computernamen aus. Die resultierende Liste der Computer wird als Wert des ComputerName-Parameters des New-PSSession Cmdlets festgelegt.

New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)

Beispiel 8: Umbenennen von Dateien, und wählen Sie mehrere aus, die überprüft werden sollen

In diesem Beispiel wird den Basisnamen von Textdateien, die über das schreibgeschützte Attribut verfügen, ein Suffix "-ro" hinzugefügt, und dann werden die ersten fünf Dateien angezeigt, damit der Benutzer ein Beispiel des Effekts sehen kann.

Get-ChildItem verwendet den dynamischen Parameter ReadOnly , um schreibgeschützte Dateien abzurufen. Die resultierenden Dateien werden an das Rename-Item Cmdlet weitergeleitet, wodurch die Datei umbenannt wird. Es verwendet den PassThru-Parameter von Rename-Item , um die umbenannten Dateien an das Select-Object Cmdlet zu senden, das die ersten 5 für die Anzeige auswählt.

Der Wait-Parameter von Select-Object verhindert, dass PowerShell das Get-ChildItem Cmdlet beendet, nachdem es die ersten fünf schreibgeschützten Textdateien abgerufen hat. Ohne diesen Parameter würden nur die ersten fünf schreibgeschützten Dateien umbenannt.

Get-ChildItem *.txt -ReadOnly |
    Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru |
    Select-Object -First 5 -Wait

Beispiel 9: Anzeigen der Feinheiten des Parameters -ExpandProperty

Dieses Beispiel zeigt die Feinheiten des ExpandProperty-Parameters .

Beachten Sie, dass die generierte Ausgabe ein Array von [System.Int32] Instanzen war. Die Instanzen entsprechen den Standardformatierungsregeln der Ausgabeansicht. Dies gilt für alle erweiterten Eigenschaften. Wenn die ausgegebenen Objekte ein bestimmtes Standardformat aufweisen, ist die erweiterte Eigenschaft möglicherweise nicht sichtbar.

# 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

Beispiel 10: Create benutzerdefinierte Eigenschaften für Objekte

Im folgenden Beispiel wird veranschaulicht, wie sie Select-Object einem beliebigen Objekt eine benutzerdefinierte Eigenschaft hinzufügen. Wenn Sie einen Eigenschaftsnamen angeben, der nicht vorhanden ist, Select-Object erstellt diese Eigenschaft als NoteProperty für jedes übergebene Objekt.

$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject

MyCustomProperty
----------------
New Custom Property

Beispiel 11: Create berechneten Eigenschaften für jedes InputObject

In diesem Beispiel wird veranschaulicht, wie Sie Select-Object Ihrer Eingabe berechnete Eigenschaften hinzufügen. Das Übergeben eines ScriptBlock an den Property-Parameter führt Select-Object dazu, den Ausdruck für jedes übergebene Objekt auszuwerten und die Ergebnisse der Ausgabe hinzuzufügen. Im ScriptBlock können Sie die $_ Variable verwenden, um auf das aktuelle Objekt in der Pipeline zu verweisen.

Verwendet standardmäßig Select-Object die ScriptBlock-Zeichenfolge als Namen der Eigenschaft. Mithilfe einer Hashtable können Sie die Ausgabe Ihres ScriptBlock als benutzerdefinierte Eigenschaft bezeichnen, die jedem Objekt hinzugefügt wird. Sie können jedem Objekt, das an Select-Objectübergeben wird, mehrere berechnete Eigenschaften hinzufügen.

# 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

Beispiel 12: Auswählen von Hashtabellenschlüsseln ohne Verwendung berechneter Eigenschaften

Ab PowerShell 6 Select-Object unterstützt die Auswahl der Schlüssel der Hashtabelleneingabe als Eigenschaften. Im folgenden Beispiel werden die weight Schlüssel und name in einer Eingabehashtabelle ausgewählt und die Ausgabe angezeigt.

@{ name = 'a' ; weight = 7 } | Select-Object -Property name, weight

name weight
---- ------
a         7

Parameter

-ExcludeProperty

Gibt die Eigenschaften an, die dieses Cmdlet aus dem Vorgang ausschließt. Platzhalter sind zulässig.

Ab PowerShell 6 ist es nicht mehr erforderlich, den Property-Parameter einzuschließen, damit ExcludeProperty funktioniert.

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

-ExpandProperty

Gibt eine Eigenschaft zur Auswahl an und zeigt an, dass versucht werden sollte, diese Eigenschaft zu erweitern. Wenn für die Pipeline des Eingabeobjekts die Eigenschaft nicht benannt ist, Select-Object wird ein Fehler zurückgegeben.

  • Wenn die angegebene Eigenschaft ein Array ist, ist jeder Wert des Arrays in der Ausgabe enthalten.
  • Wenn es sich bei der angegebenen Eigenschaft um ein Objekt handelt, werden die Objekteigenschaften für jedes InputObject erweitert.

In beiden Fällen entspricht der Type der Ausgabeobjekte der erweiterten Eigenschaft Type.

Wenn der Property-Parameter angegeben ist, versucht, Select-Object jede ausgewählte Eigenschaft als NoteProperty jedem ausgegebenen Objekt hinzuzufügen.

Warnung

Wenn Sie eine Fehlermeldung erhalten, dass eine Eigenschaft nicht verarbeitet werden kann, da bereits eine Eigenschaft mit diesem Namen vorhanden ist, sollten Sie Folgendes beachten. Beachten Sie, Select-Object dass bei Verwendung von ExpandProperty keine vorhandene Eigenschaft ersetzt werden kann. Das bedeutet Folgendes:

  • Wenn das erweiterte Objekt über eine Eigenschaft mit demselben Namen verfügt, gibt der Befehl einen Fehler zurück.
  • Wenn das Selected-Objekt über eine Eigenschaft mit demselben Namen wie die Eigenschaft eines Expanded-Objekts verfügt, gibt der Befehl einen Fehler zurück.
Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-First

Gibt die Anzahl von Objekten an, die vom Anfang eines Arrays von Eingabeobjekten ausgewählt werden sollen.

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

-Index

Wählt Objekte aus einem Array anhand ihrer Indexwerte. Geben Sie die Indizes in einer durch Trennzeichen getrennten Liste ein. Indizes in einem Array beginnen mit 0, wobei 0 den ersten Wert und (n-1) den letzten Wert darstellt.

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

-InputObject

Gibt Objekte an, die an das Cmdlet über die Pipeline gesendet werden sollen. Mit diesem Parameter können Sie Objekte an übergeben Select-Object.

Wenn Sie Objekte an den InputObject-Parameter übergeben, behandelt das InputObject-Objekt als einzelnes Objekt, Select-Object auch wenn es sich bei dem Wert um eine Auflistung handelt, anstatt die Pipeline zu verwenden. Es wird empfohlen, die Pipeline zu verwenden, wenn Sie Sammlungen an Select-Objectübergeben.

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

-Last

Gibt die Anzahl der Objekte an, die am Ende eines Arrays von Eingabeobjekten ausgewählt werden sollen.

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

-Property

Gibt die auszuwählenden Eigenschaften an. Diese Eigenschaften werden den Ausgabeobjekten als NoteProperty-Member hinzugefügt. Platzhalter sind zulässig. Wenn das Eingabeobjekt nicht über die Eigenschaft namens verfügt, wird der Wert des neuen NoteProperty auf $nullfestgelegt.

Der Wert des Property-Parameters kann eine neue berechnete Eigenschaft sein. Zum Erstellen einer berechneten Eigenschaft verwenden Sie eine Hashtabelle.

Gültige Schlüssel sind:

  • Name (oder Bezeichnung) – <string>
  • Ausdruck – <string> oder <script block>

Weitere Informationen finden Sie unter about_Calculated_Properties.

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

-Skip

Überspringt (wählt nicht) die angegebene Anzahl von Elementen aus. Standardmäßig zählt der Skip-Parameter vom Anfang der Auflistung von -Objekten. Wenn der Befehl den Parameter Last verwendet, zählt er vom Ende der Auflistung.

Im Gegensatz zum Index-Parameter, der bei 0 beginnt, beginnt der Skip-Parameter bei 1.

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

-SkipIndex

Überspringt (wählt nicht) die Objekte aus einem Array basierend auf ihren Indexwerten aus. Geben Sie die Indizes in einer durch Trennzeichen getrennten Liste ein. Indizes in einem Array beginnen mit 0, wobei 0 den ersten Wert und (n-1) den letzten Wert darstellt.

Dieser Parameter wurde in Windows PowerShell 6.0 eingeführt.

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

-SkipLast

Überspringt (wählt nicht) die angegebene Anzahl von Elementen am Ende der Liste oder des Arrays aus. Funktioniert auf die gleiche Weise wie die Verwendung von Skip zusammen mit dem Last-Parameter .

Im Gegensatz zum Index-Parameter , der bei 0 zu zählen beginnt, beginnt der SkipLast-Parameter bei 1.

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

-Unique

Gibt an, dass, wenn eine Teilmenge der Eingabeobjekte identische Eigenschaften und Werte aufweist, nur ein einzelnes Element der Teilmenge ausgewählt werden soll.

Unique wählt Werte aus, nachdem andere Filterparameter angewendet wurden.

Bei diesem Parameter wird die Groß-/Kleinschreibung beachtet. Daher gelten Zeichenfolgen, die sich nur im Hinblick auf die Groß-/Kleinschreibung unterscheiden, als eindeutig.

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

-Wait

Gibt an, dass das Cmdlet die Optimierung deaktiviert. PowerShell führt Befehle in der Reihenfolge aus, in der sie in der Befehlspipeline angezeigt werden, und ermöglicht es ihnen, alle Objekte zu generieren. Wenn Sie einen Select-Object Befehl mit dem Parameter First oder Index in eine Befehlspipeline einschließen, beendet PowerShell standardmäßig den Befehl, der die Objekte generiert, sobald die ausgewählte Anzahl von Objekten generiert wird.

Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.

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

Eingaben

PSObject

Sie können Objekte an dieses Cmdlet weiterleiten.

Ausgaben

PSObject

Dieses Cmdlet gibt die Eingabeobjekte mit nur den ausgewählten Eigenschaften zurück.

Hinweise

PowerShell enthält die folgenden Aliase für Select-Object:

  • Alle Plattformen:
    • select

Das Optimierungsfeature von Select-Object ist nur für Befehle verfügbar, die Objekte während der Verarbeitung in die Pipeline schreiben. Sie hat keine Auswirkungen auf Befehle, die verarbeitete Objekte puffern und als Sammlung erstellen. Das unmittelbare Erstellen von Objekten ist eine bewährte Methode zum Entwerfen von Cmdlets. Weitere Informationen finden Sie unter Schreiben einzelner Datensätze in die Pipeline in den Richtlinien für stark unterstützte Entwicklung.