Select-Object
Wählt Objekte oder Objekteigenschaften aus.
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>]
Beschreibung
Das cmdlet Select-Object
wählt die angegebenen Eigenschaften eines Objekts oder einer Gruppe von Objekten aus.
Sie kann auch eindeutige Objekte, eine bestimmte Anzahl von Objekten oder Objekte an einer angegebenen Position in einem Array auswählen.
Um Objekte aus einer Auflistung auszuwählen, verwenden Sie die Parameter First, Last, Unique, Skipund Index Parameter. Verwenden Sie zum Auswählen von Objekteigenschaften den Parameter Property.
Wenn Sie Eigenschaften auswählen, gibt Select-Object
neue Objekte zurück, die nur über die angegebenen Eigenschaften verfügen.
Ab Windows PowerShell 3.0 enthält Select-Object
ein Optimierungsfeature, das 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 Befehlspipeline einschließen, beendet PowerShell den Befehl, der die Objekte generiert, sobald die ausgewählte Anzahl von Objekten generiert wird, auch wenn der Befehl, der die Objekte generiert, vor dem Select-Object
Befehl in der Pipeline angezeigt wird.
Verwenden Sie zum Deaktivieren dieses Optimierungsverhaltens den Parameter Wait.
Beispiele
Beispiel 1: Auswählen von Objekten nach Eigenschaft
Dieser Befehl erstellt Objekte mit den eigenschaften Name, IDund Arbeitssatz (WS) von Prozessobjekten.
Get-Process | Select-Object -Property ProcessName, Id, WS
Beispiel 2: Auswählen von Objekten nach Eigenschaft und Formatieren der Ergebnisse
Dieser Befehl ruft Informationen zu den Modulen ab, die von den Prozessen auf dem Computer verwendet werden.
Es verwendet Get-Process
Cmdlet, um den Prozess auf dem Computer abzurufen.
Es verwendet das Cmdlet Select-Object
, um ein Array von [System.Diagnostics.ProcessModule]
Instanzen auszugeben, die in der Modules--Eigenschaft der einzelnen System.Diagnostics.Process
Instanzausgabe durch Get-Process
enthalten sind.
Der Befehl verwendet den Parameter Property des Cmdlets Select-Object
, um die Prozessnamen auszuwählen. Dadurch wird jeder ProcessName
Instanz ein NoteProperty
[System.Diagnostics.ProcessModule]
hinzugefügt und mit dem Wert der aktuellen Prozesse ProcessName-Eigenschaft aufgefüllt.
Der Befehl verwendet das Cmdlet Format-List
, um den Namen und die Module in jedem Prozess 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 mit dem größten Arbeitsspeicher
Dieser Befehl ruft die fünf Prozesse ab, die den größten Arbeitsspeicher verwenden.
Das Cmdlet Get-Process
ruft die Prozesse auf dem Computer ab.
Mit dem Cmdlet Sort-Object
werden die Prozesse entsprechend der Speicherauslastung (Arbeitssatz) sortiert, 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, da Sort-Object
alle Objekte verarbeitet und dann eine Auflistung zurückgibt.
Die Select-Object
Optimierung ist nur für Befehle verfügbar, die Objekte bei der Verarbeitung einzeln zurückgeben.
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
Dieser Befehl verwendet den parameter Unique von Select-Object
, um eindeutige Zeichen aus einem Array von Zeichen abzurufen.
"a","b","c","a","a","a" | Select-Object -Unique
a
b
c
Beispiel 5: Auswählen der neuesten und ältesten Ereignisse im Ereignisprotokoll
Diese Befehle erhalten die ersten (neuesten) und letzten (ältesten) Ereignisse im Windows PowerShell-Ereignisprotokoll.
Der Befehl verwendet das Cmdlet Get-EventLog
, um alle Ereignisse im Windows PowerShell-Protokoll abzurufen.
Sie speichert sie in der variablen $a
.
Der zweite Befehl verwendet einen Pipelineoperator (|), um die Ereignisse in $a
an das Cmdlet Select-Object
zu senden.
Der Befehl Select-Object
verwendet den Parameter Index, 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: Auswählen aller Objekte außer dem ersten Objekt
Dieser Befehl erstellt eine neue PSSession auf den einzelnen Computern, die in den Servers.txt-Dateien aufgeführt sind, mit Ausnahme der ersten.
Dieser Befehl verwendet das Cmdlet Select-Object
, um alle Computer außer dem ersten Computer in einer Liste der Computernamen auszuwählen.
Die resultierende Liste der Computer wird als Wert des ComputerName Parameter des Cmdlets New-PSSession
festgelegt.
New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)
Beispiel 7: Umbenennen von Dateien und Auswählen mehrerer dateien zum Überprüfen
Mit diesem Befehl wird ein Suffix "-ro" zu den Basisnamen von Textdateien hinzugefügt, die über das schreibgeschützte Attribut verfügen. Anschließend werden die ersten fünf Dateien angezeigt, damit der Benutzer ein Beispiel für den Effekt sehen kann.
Der Befehl verwendet den ReadOnly dynamischen Parameter des cmdlets Get-ChildItem
für FileSystem, um schreibgeschützte Dateien abzurufen.
Sie verwendet einen Pipelineoperator (|), um die Dateien an das Cmdlet Rename-Item
zu senden, wodurch die Datei umbenannt wird.
Es verwendet den Passthru Parameter von Rename-Item
, um die umbenannten Dateien an das Cmdlet Select-Object
zu senden, das die ersten 5 für die Anzeige auswählt.
Der parameter Wait von Select-Object
verhindert, dass PowerShell das cmdlet Get-ChildItem
beendet, nachdem die ersten fünf schreibgeschützten Textdateien abgerufen wurden.
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 8: Veranschaulichen der Ungenauigkeiten des -ExpandProperty-Parameters
In diesem Beispiel werden die Ungenauigkeiten des ExpandProperty--Parameters veranschaulicht.
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 Expanded-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), 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
Beispiel 9: Erstellen benutzerdefinierter Eigenschaften für Objekte
Im folgenden Beispiel wird die Verwendung von Select-Object
zum Hinzufügen einer benutzerdefinierten Eigenschaft zu einem beliebigen Objekt veranschaulicht.
Wenn Sie einen nicht vorhandenen Eigenschaftennamen angeben, erstellt Select-Object
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 10: Erstellen berechneter Eigenschaften für jedes InputObject
In diesem Beispiel wird die Verwendung von Select-Object
zum Hinzufügen berechneter Eigenschaften zu Ihrer Eingabe veranschaulicht.
Das Übergeben eines ScriptBlock- an den parameter Property bewirkt, dass Select-Object
den Ausdruck für jedes übergebene Objekt auswerten und die Ergebnisse zur Ausgabe hinzufügen. Innerhalb des ScriptBlock-können Sie die $_
Variable verwenden, um auf das aktuelle Objekt in der Pipeline zu verweisen.
Standardmäßig verwendet 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
Parameter
-ExcludeProperty
Gibt die Eigenschaften an, die dieses Cmdlet vom Vorgang ausschließt. Wildcards sind zulässig. Dieser Parameter ist nur wirksam, wenn der Befehl auch den Parameter Property enthält.
Typ: | String[] |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | True |
-ExpandProperty
Gibt eine auszuwählende Eigenschaft an und gibt an, dass versucht werden soll, diese Eigenschaft zu erweitern.
- Wenn es sich bei der angegebenen Eigenschaft um ein Array handelt, wird 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 Objektausgabe dem Type der erweiterten Eigenschaft.
Wenn der parameter Property angegeben ist, versucht Select-Object
, jede ausgewählte Eigenschaft als NoteProperty- zu jedem ausgegebenen Objekt hinzuzufügen.
Warnung
Wenn Sie den Fehler erhalten: Select : Property kann nicht verarbeitet werden, da eigenschaft <PropertyName>
bereits vorhanden ist, beachten Sie Folgendes.
Beachten Sie, dass -ExpandProperty
bei Verwendung von Select-Object
keine vorhandene Eigenschaft ersetzen kann.
Dies bedeutet:
- Wenn das erweiterte Objekt über eine Eigenschaft mit demselben Namen verfügt, tritt ein Fehler auf.
- Wenn das Selected-Objekt eine Eigenschaft mit demselben Namen wie eine Expanded objects-Eigenschaft aufweist, tritt ein Fehler auf.
Typ: | String |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe 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: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Index
Wählt 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 darstellt und (n-1) den letzten Wert darstellt.
Typ: | Int32[] |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-InputObject
Gibt Objekte an, die über die Pipeline an das Cmdlet gesendet werden sollen.
Mit diesem Parameter können Sie Objekte an Select-Object
übergeben.
Wenn Sie Objekte an den parameter InputObject übergeben, anstatt die Pipeline zu verwenden, behandelt Select-Object
die InputObject- als einzelnes Objekt, auch wenn der Wert eine Auflistung ist. Es wird empfohlen, die Pipeline zu verwenden, wenn Sie Sammlungen an Select-Object
übergeben.
Typ: | PSObject |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | True |
Platzhalterzeichen akzeptieren: | False |
-Last
Gibt die Anzahl der Objekte an, die am Ende eines Arrays von Eingabeobjekten ausgewählt werden sollen.
Typ: | Int32 |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Property
Gibt die auszuwählenden Eigenschaften an. Diese Eigenschaften werden als NoteProperty Member zu den Ausgabeobjekten hinzugefügt. Wildcards sind zulässig.
Der Wert des Property-Parameters kann eine neue berechnete Eigenschaft sein. Verwenden Sie zum Erstellen einer berechneten Eigenschaft eine Hashtabelle. Gültige Schlüssel sind:
- Name (oder Bezeichnung):
<string>
- Ausdruck
<string>
oder<script block>
Typ: | Object[] |
Position: | 0 |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | True |
-Skip
Überspringt (nicht markiert) die angegebene Anzahl von Elementen. Standardmäßig zählt der Skip Parameter vom Anfang des Arrays oder der Liste der Objekte, aber wenn der Befehl den Parameter Last verwendet, zählt er vom Ende der Liste oder matrix.
Im Gegensatz zum Index Parameter, der mit 0 beginnt, beginnt der Skip Parameter bei 1.
Typ: | Int32 |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-SkipLast
Überspringt (nicht markiert) die angegebene Anzahl von Elementen am Ende der Liste oder des Arrays. Funktioniert auf die gleiche Weise wie die Verwendung von Skip zusammen mit Last Parameter.
Im Gegensatz zum Index Parameter, der mit 0 beginnt, beginnt der SkipLast Parameter bei 1.
Typ: | Int32 |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-Unique
Gibt an, dass, wenn eine Teilmenge der Eingabeobjekte identische Eigenschaften und Werte aufweist, nur ein einzelnes Element der Teilmenge ausgewählt wird.
Bei diesem Parameter wird die Groß-/Kleinschreibung beachtet. Daher werden Zeichenfolgen, die sich nur in der Groß-/Kleinschreibung unterscheiden, als eindeutig betrachtet.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | 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 ihnen das Generieren aller Objekte.
Wenn Sie standardmäßig einen Select-Object
Befehl in die Parameter First oder Index in eine Befehlspipeline einschließen, beendet PowerShell 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.
Typ: | SwitchParameter |
Position: | Named |
Standardwert: | None |
Erforderlich: | False |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Eingaben
Sie können jedes Objekt an Select-Object
pfeifen.
Ausgaben
Hinweise
- Sie können auch auf das cmdlet
Select-Object
verweisen, indem Sie den integrierten Aliasselect
verwenden. Weitere Informationen finden Sie unter about_Aliases. - Das Optimierungsfeature von
Select-Object
ist nur für Befehle verfügbar, die Objekte während der Verarbeitung in die Pipeline schreiben. Sie wirkt sich nicht auf Befehle aus, die verarbeitete Objekte puffern und als Sammlung schreiben. Das sofortige Schreiben von Objekten ist eine bewährte Methode für das Cmdlet-Design. Weitere Informationen finden Sie unter Schreiben einzelner Datensätze in die Pipeline in in der MSDN Library dringend geförderte Entwicklungsrichtlinien.