Select-Object

Modul: Microsoft.In: PowerShell.Utility

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-ChildItemstoppt, 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

-ExcludeProperty

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

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

-First

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

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

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

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

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

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

Ü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
-Unique

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

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 Alias select 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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.