Wählt Objekte oder Objekteigenschaften aus.
Syntax
Select-Object >]
Select-Object >]
Beschreibung
Das Cmdlet Select-Object
wählt die angegebenen Eigenschaften eines Objekts oder einer Gruppe von Objekten aus. Es kann auch eindeutige Objekte, eine bestimmte Anzahl von Objekten oder Objekte an einer bestimmten 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 den Parameter Property, um Objekteigenschaften auszuwählen. Wenn Sie selectproperties , Select-Object
gibt neue Objekte zurück, die nur die angegebenen Eigenschaften haben.
Ab Windows PowerShell 3.0 enthält Select-Object
eine Optimierungsfunktion, die verhindert, dass Befehle Objekte erstellen und verarbeiten, die nicht verwendet werden.
Wenn Sie einen Select-Object
-Befehl mit den Parametern First oder Index in eine commandpipeline einfügen, stoppt PowerShell den Befehl, der die Objekte generiert, sobald die ausgewählte Anzahl von Objekten generiert wurde, auch wenn der Befehl, der die Objekte generiert, vor dem BefehlSelect-Object
in der Pipeline angezeigt wird. Um dieses Optimierungsverhalten zu deaktivieren, verwenden Sie den Waitparameter.
Beispiele
Beispiel 1: Objekte nach Eigenschaft auswählen
In diesem Beispiel werden Objekte mit den Eigenschaften Name, ID und Working Set (WS) von Process-Objekten erstellt.
Get-Process | Select-Object -Property ProcessName, Id, WS
Beispiel 2: Objekte nach Eigenschaft auswählen und die Ergebnisse formatieren
In diesem Beispiel werden Informationen zu den Modulen abgerufen, die von den Prozessen auf dem Computer verwendet werden. Es verwendetGet-Process
Cmdlet, um den Prozess auf dem Computer abzurufen.
Es verwendet das Select-Object
Cmdlet, um ein Array von Instanzen auszugeben, die in der Moduleigenschaft jedes
System.Diagnostics.Process
instanceoutput von Get-Process
.
Der Eigenschaftsparameter des Select-Object
Cmdlets wählt die Prozessnamen aus. Dies fügt eineProcessName
NoteProperty zu jeder Instanz hinzu und füllt sie mit dem Wert der ProcessName Eigenschaft des aktuellen Prozesses.
Schließlich wird Format-List
Cmdlet verwendet, um den Namen und die Module jedes Prozesses in einer Liste anzuzeigen.
Beispiel 3: Prozesse auswählen, die den meisten Arbeitsspeicher verwenden
In diesem Beispiel werden die fünf Prozesse abgerufen, die den meisten Arbeitsspeicher verwenden. Das Get-Process
Cmdlet ruft abdie Prozesse auf dem Computer. Das Cmdlet Sort-Object
sortiert die Prozesse nach der Auslastung des Arbeitsspeichers (Arbeitssatz), und das Cmdlet Select-Object
wählt nur die letzten fünf Elemente des resultierenden Arrays von Objekten aus.
Der Parameter Wait ist in Befehlen, die das Cmdlet Sort-Object
enthalten, nicht erforderlich, daSort-Object
alle Objekte verarbeitet und dann eine Sammlung zurückgibt. Die Select-Object
-Optimierungist nur für Befehle verfügbar, die Objekte einzeln zurückgeben, während sie verarbeitet werden.
Beispiel 4: Wählen Sie eindeutige Zeichen aus einem Array
In diesem Beispiel wird der Parameter Unique von Select-Object
verwendet, um eindeutige Zeichen aus einem Array von Zeichen abzurufen.
"a","b","c","a","a","a" | Select-Object -Uniqueabc
Beispiel 5: Neueste und älteste Ereignisse im Ereignisprotokoll auswählen
In diesem Beispiel werden die ersten (neuesten) und letzten (ältesten) Ereignisse im Windows PowerShell-Ereignisprotokoll abgerufen.
Get-EventLog
ruft alle Ereignisse im Windows PowerShell-Protokoll ab und speichert sie in der Variablen $a
.Dann wird $a
an das Cmdlet Select-Object
geleitet. Der Befehl Select-Object
verwendet den Indexparameter, um Ereignisse aus dem Array von Ereignissen in der Variablen $a
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-EventLog -LogName "Windows PowerShell"$a | Select-Object -Index 0, ($A.count - 1)
Beispiel 6: Alle bis auf das erste Objekt auswählen
In diesem Beispiel wird auf jedem der in den Servern aufgelisteten Computer eine neue PSSession erstellt.txt-Dateien, mit Ausnahme der ersten.
Select-Object
wählt alle außer dem ersten Computer in einer Liste von Computernamen aus. Die resultierende Computerliste wird als Wert des Parameters ComputerName des New-PSSession
-Cmdlets festgelegt.
New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)
Beispiel 7: Dateien umbenennen und mehrere zur Überprüfung auswählen
In diesem Beispiel wird den Basisnamen von Textdateien mit dem schreibgeschützten Attribut das Suffix „-ro“ hinzugefügt und dann die ersten fünf Dateien angezeigt, sodass der Benutzer ein Beispiel des Effekts sehen kann.
Get-ChildItem
verwendet den dynamischen Parameter ReadOnly, um schreibgeschützte Dateien abzurufen. Die resultierende Datei wird an das Cmdlet Rename-Item
übergeben, das die Datei umbenennt. Es verwendet den Passthru-Parameter vonRename-Item
, um die umbenannten Dateien an das Cmdlet Select-Object
zu senden, das die ersten 5 für auswähltanzeige.
Der Wait-Parameter von Select-Object
verhindert, dass PowerShell das Cmdlet Get-ChildItem
stoppt, nachdem die ersten fünf schreibgeschützten Textdateien abgerufen wurden. Ohne diesen Parameter werden 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 8: Demonstrieren der Feinheiten des Parameters -ExpandProperty
Dieses Beispiel demonstriert die Feinheiten des Parameters ExpandProperty.
Beachten Sie, dass die generierte Ausgabe ein Array von Instanzen war. Die Instanzen entsprechen den Standardformatierungsregeln der Ausgabeansicht. Dies gilt für alle erweiterten Eigenschaften. Wenn theoutputted Objekte ein bestimmtes Standardformat haben, ist die expanded Eigenschaft möglicherweise nicht sichtbar.
# Create a custom object to use for the Select-Object example.$object = @{Name="CustomObject";Expand=@(1,2,3,4,5)}# Use the ExpandProperty parameter to Expand the property.$object | Select-Object -ExpandProperty Expand -Property Name12345# 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-MemberTypeName: System.Int32Name 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.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
Beispiel 9: Erstellen Sie benutzerdefinierte Eigenschaften für Objekte
Das folgende Beispiel zeigt, wie Sie mit Select-Object
jedem Objekt eine benutzerdefinierte Eigenschaft hinzufügen.Wenn Sie einen Eigenschaftsnamen angeben, der nicht existiert, Select-Object
erstellt diese Eigenschaft als aNoteProperty für jedes übergebene Objekt.
Beispiel 10: Berechnete Eigenschaften für jedes InputObject erstellen
In diesem Beispiel wird gezeigt, wie Sie mit Select-Object
berechnete Eigenschaften zu Ihrer Eingabe hinzufügen. Das Übergeben eines Skriptblocks an den Eigenschaftsparameter bewirkt, dass Select-Object
den übergebenen Ausdruck oneach Objekt auswertet und die Ergebnisse zur Ausgabe hinzufügt. Innerhalb des Scriptblocks können Sie die Variable$_
verwenden, um auf das aktuelle Objekt in der Pipeline zu verweisen.
Standardmäßig verwendet Select-Object
den ScriptBlock-String als Namen der Eigenschaft. Mit aHashtable können Sie die Ausgabe Ihres Scriptblocks als benutzerdefinierte Eigenschaft kennzeichnen, die zu eachobject hinzugefügt wurde. Sie können jedem an Select-Object
übergebenen Objekt mehrere berechnete Eigenschaften hinzufügen.
Parameters
Gibt die Eigenschaften an, die dieses Cmdlet von der Operation ausschließt. Wildcards sind erlaubt.
Ab PowerShell 6 muss der Eigenschaftsparameter forExcludeProperty nicht mehr forExcludeProperty .
Typ: | String |
Position: | Benannt |
Standardwert: | Keine |
Pipeline-Eingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | True |
Gibt eine Eigenschaft zur Auswahl an und gibt an, dass versucht werden sollte, thatproperty zu erweitern.
- Wenn die angegebene Eigenschaft ein Array ist, wird jeder Wert des Arrays in der Ausgabe enthalten.
- Wenn die angegebene Eigenschaft ein Objekt ist, werden die Objekteigenschaften für everyInputObject erweitert
In beiden Fällen stimmt der Typ der Objektausgabe mit dem Typ der erweiterten Eigenschaft überein.
Wenn der Eigenschaftsparameter angegeben ist, versucht Select-Object
, jede selectedproperty als NoteProperty zu jedem ausgegebenen Objekt hinzuzufügen.
Warnung
Wenn Sie die Fehlermeldung erhalten: Select : Property cannot be processed because property <PropertyName>
already exists, beachten Sie Folgendes.Beachten Sie, dass bei Verwendung von -ExpandProperty
Select-Object
eine vorhandene Eigenschaft nicht ersetzen kann.Dies bedeutet:
- Wenn das erweiterte Objekt eine Eigenschaft mit demselben Namen hat, tritt ein Fehler auf.
- Wenn das ausgewählte Objekt eine Eigenschaft mit demselben Namen wie eine Expanded objects-Eigenschaft hat, tritt anerror auf.
Typ: | String |
Position: | Benannt |
Standardwert: | Keine |
Pipeline-Eingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Gibt die Anzahl der Objekte an, die am Anfang eines Arrays von Eingabeobjekten ausgewählt werden sollen.
Typ: | Int32 |
Position: | Benannt |
Standardwert: | Keine |
Pipeline-Eingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Wählt Objekte aus einem Array basierend auf ihren Indexwerten aus. Geben Sie die Indizes in eine kommagetrennte 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 |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies objects to send to the cmdlet through the pipeline. This parameter enables you to pipeobjects to Select-Object
.
Wenn Sie Objekte an den Parameter InputObject übergeben, behandeltSelect-Object
das InputObject anstelle der Pipeline als einzelnes Objekt, auch wenn der Wert eine Sammlung ist. Es wird empfohlen, die Pipeline zu verwenden, wenn Sammlungen an Select-Object
.
Typ: | PSObject |
Position: | Benannt |
Standardwert: | Keine |
Pipeline-Eingabe akzeptieren: | True |
Platzhalterzeichen akzeptieren: | False |
Specifies the number of objects to select from the end of an array of input objects.
Type: | Int32 |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies the properties to select. Diese Eigenschaften werden als NoteProperty Mitglieder theoutput Objekte hinzugefügt. Wildcards sind erlaubt.
Der Wert des Parameters Property kann eine neu berechnete Eigenschaft sein. Verwenden Sie zum Erstellen einer berechneten Eigenschaft eine Hash-Tabelle.
Gültige Schlüssel sind:
- Name (oder Label) –
<string>
- Ausdruck –
<string>
oder<script block>
Weitere Informationen finden Sie unterabout_calculated_properties.
Typ: | Objekt |
Position: | 0 |
Standardwert: | Keine |
Pipeline-Eingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | True |
Überspringt (wählt nicht aus) die angegebene Anzahl von Elementen. Standardmäßig zählt der Skip-Parametervom Anfang des Arrays oder der Liste von Objekten, aber wenn der Befehl den letzten Parameter verwendet, zählt er vom Ende der Liste oder des Arrays.
Im Gegensatz zum Index-Parameter, der bei 0 zu zählen beginnt, beginnt der Skip-Parameter bei 1.
Typ: | Int32 |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Type: | Int32 |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Überspringt (wählt nicht aus) die angegebene Anzahl von Elementen vom Ende der Liste oder des Arrays. Funktioniert genauso wie die Verwendung von Skip zusammen mit dem letzten Parameter.
Im Gegensatz zum Index-Parameter, der bei 0 zu zählen beginnt, beginnt der SkipLast-Parameter bei 1.
Typ: | Int32 |
Position: | Benannt |
Standardwert: | Keine |
Pipeline-Eingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Gibt an, dass nur ein Singlemember der Teilmenge ausgewählt wird, wenn eine Teilmenge der Eingabeobjekte identische Eigenschaften und Werte aufweist.
Bei diesem Parameter wird die Groß-/Kleinschreibung beachtet. Infolgedessen werden Zeichenfolgen, die sich nur in der Zeichenumhüllung unterscheiden, als eindeutig betrachtet.
Typ: | Schalterparameter |
Position: | Benannt |
Standardwert: | Keine |
Pipeline-Eingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Zeigt an, dass das Cmdlet die Optimierung deaktiviert. PowerShell führt Befehle in der Reihenfolge aus, in der sie in der Befehlspipeline angezeigt werden, und lässt sie alle Objekte generieren. Wenn Sie einenSelect-Object
-Befehl mit den Parametern First oder Index in eine Befehlspipeline einschließen, stoppt PowerShell standardmäßig den Befehl, der die Objekte generiert, sobald die ausgewählte Anzahl von Objekten generiert wurde.
Dieser Parameter wurde in Windows PowerShell 3.0 eingeführt.
Typ: | Schalterparameter |
Position: | Benannt |
Standardwert: | Keine |
Pipeline-Eingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Eingänge
PSObject
Sie können jedes Objekt über eine Pipeline an Select-Object
übergeben.
Outputs
PSObject
Notes
-
Sie können auch auf das Cmdlet
Select-Object
durch seinen eingebauten Aliasselect
verweisen. Weitere Informationen finden Sie unter about_Aliases. -
Die Optimierungsfunktion von
Select-Object
ist nur für Befehle verfügbar, die Objekte in die Pipeline schreiben, während sie verarbeitet werden. Es hat keine Auswirkungen auf Befehle, die verarbeitete Objekte puffern undschreibe sie als Sammlung. Das sofortige Schreiben von Objekten ist eine bewährte Methode für das Cmdlet-Design. Weitere Informationen finden Sie unter Write Single Records to the Pipeline inStrongly In Development Guidelines.
- about_Calculated_Properties
- Gruppenobjekt
- Sortierobjekt
- Where-Objekt