Select-Object
Wählt Objekte oder Objekteigenschaften.
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>]
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 die angegebenen Eigenschaften aufweisen.
Ab Windows PowerShell 3.0 enthält ein Optimierungsfeature, das verhindert, Select-Object
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 aufnehmen, stoppt 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. Um dieses Optimierungsverhalten zu deaktivieren, verwenden Sie den Wait-Parameter.
Beispiele
Beispiel 1: Auswählen von Objekten nach Eigenschaft
In diesem Beispiel werden Objekte mit den Eigenschaften Name, ID und Working Set (WS) von Prozessobjekten erstellt.
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 angezeigt, die von den Prozessen auf dem Computer verwendet werden. Es verwendet Get-Process
Cmdlet, um den Prozess auf dem Computer abzurufen.
Es verwendet das Select-Object
Cmdlet, um ein Array von [System.Diagnostics.ProcessModule]
Instanzen auszugeben, die in der Modules-Eigenschaft jeder System.Diagnostics.Process
Instanzausgabe enthalten sind Get-Process
.
Der Eigenschaftsparameter des Select-Object
Cmdlets wählt die Prozessnamen aus. Dadurch wird jeder [System.Diagnostics.ProcessModule]
Instanz ein ProcessName
NoteProperty 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 jedes Prozesses 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 meisten Arbeitsspeicher
In diesem Beispiel werden die fünf Prozesse angezeigt, 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 Verwendung des Arbeitsspeichers (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 werden. 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 Parameter Select-Object
"Unique" verwendet, um eindeutige Zeichen aus einem Array von Zeichen abzurufen.
"a","b","c","a","a","a" | Select-Object -Unique
a
b
c
Beispiel 5: Verwenden von "-Unique" mit anderen Parametern
Die Werte des eindeutigen Parameters werden gefiltert, 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 wird zuerst als die ersten 2 Elemente im Array ausgewählt "a","a"
. Eindeutig wird angewendet "a","a"
und als eindeutiger Wert zurückgegeben a
.
Beispiel 6: Wählen Sie neueste und älteste Ereignisse im Ereignisprotokoll aus.
In diesem Beispiel werden die ersten (neuesten) und letzten (ältesten) Ereignisse im Windows PowerShell Ereignisprotokoll angezeigt.
Get-EventLog
ruft 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 Indexparameter , 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-EventLog -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($A.count - 1)
Beispiel 7: Wählen Sie alle, aber das erste Objekt aus.
In diesem Beispiel wird eine neue PSSession auf den einzelnen Computern erstellt, die in den Servers.txt Dateien aufgeführt sind, mit Ausnahme der ersten.
Select-Object
wählt alle, aber den ersten Computer in einer Liste der 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: Benennen Sie Dateien um, und wählen Sie mehrere aus, um zu überprüfen.
In diesem Beispiel wird ein "-ro"-Suffix zu den Basisnamen von Textdateien hinzugefügt, die über das schreibgeschützte Attribut verfügen, und dann die ersten fünf Dateien angezeigt, damit der Benutzer ein Beispiel für den Effekt sehen kann.
Get-ChildItem
verwendet den dynamischen Parameter ReadOnly , um schreibgeschützte Dateien abzurufen. Die resultierenden Dateien werden an das Rename-Item
Cmdlet weitergeleitet, das die Datei umbenannt. Er verwendet den Passthru-ParameterRename-Item
, um die umbenannten Dateien an das Select-Object
Cmdlet zu senden, das die ersten 5 für die Anzeige auswählt.
Der Wait-ParameterSelect-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: Veranschaulichen der Ungenauigkeiten des Parameters "-ExpandProperty"
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 standardformatierungsregeln der Ausgabeansicht. Dies gilt für alle erweiterten Eigenschaften. Wenn die ausgegebenen Objekte über ein bestimmtes Standardformat verfügen, 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 10: Erstellen benutzerdefinierter Eigenschaften für Objekte
Im folgenden Beispiel wird die Verwendung Select-Object
einer benutzerdefinierten Eigenschaft zu einem beliebigen Objekt veranschaulicht.
Wenn Sie einen Eigenschaftsnamen angeben, der nicht vorhanden ist, Select-Object
wird diese Eigenschaft als NoteProperty für jedes übergebene Objekt erstellt.
$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject
MyCustomProperty
----------------
New Custom Property
Beispiel 11: Erstellen berechneter Eigenschaften für jedes InputObject
In diesem Beispiel wird die Verwendung Select-Object
berechneter Eigenschaften zu Ihrer Eingabe veranschaulicht. Durch das Übergeben eines ScriptBlock an den Property-Parameter wird Select-Object
der Ausdruck für jedes übergebene Objekt ausgewertet und die Ergebnisse der Ausgabe hinzugefügt. Innerhalb des ScriptBlocks können Sie die $_
Variable verwenden, um auf das aktuelle Objekt in der Pipeline zu verweisen.
Standardmäßig Select-Object
wird die ScriptBlock-Zeichenfolge als Name der Eigenschaft verwendet. Mit einer Hashtable können Sie die Ausgabe Ihres ScriptBlocks als benutzerdefinierte Eigenschaft bezeichnen, die jedem Objekt hinzugefügt wird. Sie können jedem objekt, das an übergeben wird, mehrere berechnete Select-Object
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 aus dem Vorgang ausschließt. Platzhalter sind zulässig.
Ab PowerShell 6 ist es nicht mehr erforderlich, den Eigenschaftsparameter 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 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 jedes InputObject erweitert.
In beiden Fällen entspricht der Typ der Objektausgabe dem Typ der erweiterten Eigenschaft.
Wenn der Parameter "Property " angegeben ist, wird 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 die Eigenschaft <PropertyName>
bereits vorhanden ist, berücksichtigen Sie Folgendes.
Beachten Sie, dass bei verwendung -ExpandProperty
, Select-Object
keine vorhandene Eigenschaft ersetzt werden kann.
Dies bedeutet Folgendes:
- Wenn das erweiterte Objekt über eine Eigenschaft desselben Namens verfügt, tritt ein Fehler auf.
- Wenn das Selected-Objekt eine Eigenschaft desselben Namens wie eine Expanded-Objekteigenschaft aufweist, tritt ein Fehler auf.
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 Select-Object
.
Wenn Sie Objekte an den InputObject-Parameter übergeben, anstatt die Pipeline zu verwenden, Select-Object
behandelt das InputObject als einzelnes Objekt, auch wenn der Wert eine Auflistung ist. Es wird empfohlen, die Pipeline beim Übergeben von Sammlungen an Select-Object
.
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 als NoteProperty-Elemente zu den Ausgabeobjekten hinzugefügt. Platzhalter sind zulässig.
Der Wert des Eigenschaftsparameters 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 die angegebene Anzahl von Elementen (wählt sie nicht aus). Standardmäßig zählt der Parameter Skip vom Anfang des Arrays oder der Liste der Objekte, 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 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
Type: | Int32[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SkipLast
Übersprungen (nicht ausgewählt) die angegebene Anzahl von Elementen aus dem Ende der Liste oder des Arrays. Funktioniert genauso wie die Verwendung von Skip zusammen mit dem Letzten Parameter.
Im Gegensatz zum Indexparameter , der mit der Zählung bei 0 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 nur ein einzelnes Element der Teilmenge ausgewählt wird, wenn eine Teilmenge der Eingabeobjekte identische Eigenschaften und Werte aufweist.
Eindeutige Auswahlwerte , nachdem andere Filterparameter angewendet werden.
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 standardmäßig einen Select-Object
Befehl mit den Parametern "First " oder " Index " in einer 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.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Eingaben
Sie können ein beliebiges Objekt an Select-Object
.
Ausgaben
Hinweise
Sie können auch über den integrierten Alias
select
auf dasSelect-Object
Cmdlet verweisen. Weitere Informationen finden Sie unter about_Aliases.Das Optimierungsfeature ist
Select-Object
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 die dringend unterstützte Entwicklung.