Select-Object
Wybiera obiekty lub właściwości obiektu.
Składnia
DefaultParameter (domyślnie)
Select-Object
[[-Property] <Object[]>]
[-InputObject <PSObject>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-Last <Int32>]
[-First <Int32>]
[-Skip <Int32>]
[-Wait]
[<CommonParameters>]
SkipLastParameter
Select-Object
[[-Property] <Object[]>]
[-InputObject <PSObject>]
[-ExcludeProperty <String[]>]
[-ExpandProperty <String>]
[-Unique]
[-SkipLast <Int32>]
[<CommonParameters>]
IndexParameter
Select-Object
[-InputObject <PSObject>]
[-Unique]
[-Wait]
[-Index <Int32[]>]
[<CommonParameters>]
Opis
Polecenie cmdlet Select-Object wybiera określone właściwości obiektu lub zestawu obiektów.
Może również wybierać unikatowe obiekty, określoną liczbę obiektów lub obiektów w określonej pozycji w tablicy.
Aby wybrać obiekty z kolekcji, użyj parametrów First, Last, Unique, Skipi Index. Aby wybrać właściwości obiektu, użyj parametru właściwości Select-Object zwraca nowe obiekty, które mają tylko określone właściwości.
Począwszy od programu Windows PowerShell 3.0, Select-Object zawiera funkcję optymalizacji, która uniemożliwia polecenia tworzenia i przetwarzania obiektów, które nie są używane.
Po dołączeniu polecenia Select-Object z parametrami First lub Index w potoku poleceń program PowerShell zatrzymuje polecenie, które generuje obiekty zaraz po wygenerowaniu wybranej liczby obiektów, nawet gdy polecenie, które generuje obiekty, pojawia się przed Select-Object polecenia w potoku.
Aby wyłączyć tę optymalizację zachowania, użyj parametru Wait.
Przykłady
Przykład 1. Wybieranie obiektów według właściwości
To polecenie tworzy obiekty, które
Get-Process | Select-Object -Property ProcessName, Id, WS
Przykład 2. Wybieranie obiektów według właściwości i formatowanie wyników
To polecenie pobiera informacje o modułach używanych przez procesy na komputerze.
Używa Get-Process polecenia cmdlet w celu pobrania procesu na komputerze.
Używa polecenia cmdlet
Polecenie używa parametru właściwości ProcessNameNoteProperty do każdego wystąpienia [System.Diagnostics.ProcessModule] i wypełnienie go wartością bieżących procesów właściwości ProcessName.
Polecenie używa polecenia cmdlet Format-List do wyświetlania nazwy i modułów w każdym procesie na liście.
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
...
Przykład 3. Wybieranie procesów przy użyciu największej ilości pamięci
To polecenie pobiera pięć procesów korzystających z największej ilości pamięci.
Polecenie cmdlet Get-Process pobiera procesy na komputerze.
Polecenie cmdlet Sort-Object sortuje procesy zgodnie z użyciem pamięci (zestawu roboczego), a polecenie cmdlet Select-Object wybiera tylko pięć ostatnich elementów członkowskich wynikowej tablicy obiektów.
Parametr Wait nie jest wymagany w poleceniach zawierających polecenie cmdlet Sort-Object, ponieważ Sort-Object przetwarza wszystkie obiekty, a następnie zwraca kolekcję.
Optymalizacja Select-Object jest dostępna tylko dla poleceń, które zwracają obiekty indywidualnie podczas ich przetwarzania.
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
Przykład 4. Wybieranie unikatowych znaków z tablicy
To polecenie używa parametru UniqueSelect-Object, aby uzyskać unikatowe znaki z tablicy znaków.
"a","b","c","a","a","a" | Select-Object -Unique
a
b
c
Przykład 5. Wybieranie najnowszych i najstarszych zdarzeń w dzienniku zdarzeń
Te polecenia pobierają pierwsze (najnowsze) i ostatnie (najstarsze) zdarzenia w dzienniku zdarzeń programu Windows PowerShell.
Polecenie używa polecenia cmdlet Get-EventLog, aby pobrać wszystkie zdarzenia w dzienniku programu Windows PowerShell.
Zapisuje je w zmiennej $a.
Drugie polecenie używa operatora potoku (|) do wysyłania zdarzeń w $a do polecenia cmdlet Select-Object.
Polecenie $a minus 1.
$a = Get-EventLog -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($A.count - 1)
Przykład 6. Zaznacz wszystko, ale pierwszy obiekt
To polecenie tworzy nową konsolę PSSession na każdym z komputerów wymienionych w plikach Servers.txt z wyjątkiem pierwszego.
To polecenie używa polecenia cmdlet Select-Object, aby wybrać wszystkie, ale pierwszy komputer na liście nazw komputerów.
Wynikowa lista komputerów jest ustawiana jako wartość parametru ComputerName polecenia cmdlet New-PSSession.
New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)
Przykład 7. Zmiana nazwy plików i wybranie kilku do przejrzenia
To polecenie dodaje sufiks "-ro" do podstawowych nazw plików tekstowych, które mają atrybut tylko do odczytu, a następnie wyświetla pierwsze pięć plików, aby użytkownik mógł zobaczyć próbkę efektu.
Polecenie używa ReadOnly parametru dynamicznego polecenia cmdlet Get-ChildItem dla systemu plików w celu pobrania plików tylko do odczytu.
Używa operatora potoku (|) do wysyłania plików do polecenia cmdlet Rename-Item, które zmienia nazwę pliku.
Używa parametru PassthruRename-Item do wysyłania zmienionych plików do polecenia cmdlet Select-Object, które wybiera pierwsze 5 do wyświetlenia.
Parametr WaitSelect-Object uniemożliwia programowi PowerShell zatrzymanie polecenia cmdlet Get-ChildItem po dokonaniu pierwszych pięciu plików tekstowych tylko do odczytu.
Bez tego parametru nazwa zostanie zmieniona tylko na pięć pierwszych plików tylko do odczytu.
Get-ChildItem *.txt -ReadOnly | Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru | Select-Object -First 5 -Wait
Przykład 8. Prezentacja zawiłości parametru -ExpandProperty
W tym przykładzie przedstawiono zawiłości parametru ExpandProperty.
Zwróć uwagę, że wygenerowane dane wyjściowe były tablicą wystąpień [System.Int32]. Wystąpienia są zgodne ze standardowymi regułami formatowania widoku danych wyjściowych .
Dotyczy to wszystkich właściwości rozwiniętych. Jeśli obiekty wyjściowe mają określony format standardowy, właściwość rozwinięta może nie być widoczna.
# 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
Przykład 9. Tworzenie właściwości niestandardowych w obiektach
W poniższym przykładzie pokazano użycie Select-Object w celu dodania właściwości niestandardowej do dowolnego obiektu.
Po określeniu nazwy właściwości, która nie istnieje, Select-Object tworzy tę właściwość jako NoteProperty dla każdego przekazanego obiektu.
$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject
MyCustomProperty
----------------
New Custom Property
Przykład 10: Tworzenie właściwości obliczeniowych dla każdego obiektu InputObject
W tym przykładzie pokazano użycie Select-Object w celu dodania właściwości obliczeniowych do danych wejściowych.
Przekazanie $_, aby odwołać się do bieżącego obiektu w potoku.
Domyślnie Select-Object użyje ciągu ScriptBlock jako nazwy właściwości.
Za pomocąSelect-Objectmożna dodać wiele właściwości obliczeniowych.
# 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
Parametry
-ExcludeProperty
Określa właściwości, które to polecenie cmdlet wyklucza z operacji. Symbole wieloznaczne są dozwolone. Ten parametr jest skuteczny tylko wtedy, gdy polecenie zawiera również parametr właściwości .
Właściwości parametru
| Typ: | String[] |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | True |
| DontShow: | False |
Zestawy parametrów
DefaultParameter
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
SkipLastParameter
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-ExpandProperty
Określa właściwość do wybrania i wskazuje, że należy spróbować rozwinąć tę właściwość.
- Jeśli określona właściwość jest tablicą, każda wartość tablicy jest uwzględniona w danych wyjściowych.
- Jeśli określona właściwość jest obiektem, właściwości obiektów są rozszerzane dla każdej InputObject
W obu przypadkach typ danych wyjściowych obiektów będzie zgodny z Type właściwości rozwiniętej.
Jeśli określono parametr właściwości , Select-Object spróbuje dodać każdą wybraną właściwość jako NoteProperty do każdego obiektu wyjściowego.
Ostrzeżenie
Jeśli wystąpi błąd: Wybierz pozycję : Nie można przetworzyć właściwości, ponieważ właściwość <PropertyName> już istnieje, rozważ następujące kwestie.
Należy pamiętać, że w przypadku używania -ExpandPropertySelect-Object nie można zamienić istniejącej właściwości.
Oznacza to:
- Jeśli rozwinięty obiekt ma tę samą nazwę, wystąpi błąd.
- Jeśli obiekt Selected ma właściwość o takiej samej nazwie jak właściwość Rozwinięte obiekty, wystąpi błąd.
Właściwości parametru
| Typ: | String |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
DefaultParameter
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
SkipLastParameter
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-First
Określa liczbę obiektów do wybrania od początku tablicy obiektów wejściowych.
Właściwości parametru
| Typ: | Int32 |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
DefaultParameter
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-Index
Wybiera obiekty z tablicy na podstawie ich wartości indeksu. Wprowadź indeksy na liście rozdzielanej przecinkami.
Indeksy w tablicy zaczynają się od 0, gdzie 0 reprezentuje pierwszą wartość, a (n-1) reprezentuje ostatnią wartość.
Właściwości parametru
| Typ: | Int32[] |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
IndexParameter
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-InputObject
Określa obiekty, które mają być wysyłane do polecenia cmdlet za pośrednictwem potoku.
Ten parametr umożliwia potok obiektów do Select-Object.
Podczas przekazywania obiektów do parametru InputObject, zamiast używania potoku, Select-Object traktuje InputObject jako pojedynczy obiekt, nawet jeśli wartość jest kolekcją. Zaleca się użycie potoku podczas przekazywania kolekcji do Select-Object.
Właściwości parametru
| Typ: | PSObject |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | True |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-Last
Określa liczbę obiektów do wybrania z końca tablicy obiektów wejściowych.
Właściwości parametru
| Typ: | Int32 |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
DefaultParameter
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-Property
Określa właściwości do wybrania. Te właściwości są dodawane jako elementy członkowskie NoteProperty do obiektów wyjściowych. Symbole wieloznaczne są dozwolone.
Wartość parametru Property może być nową właściwością obliczeniową. Aby utworzyć tabelę obliczeniową, użyj tabeli skrótów. Prawidłowe klucze to:
- Nazwa (lub etykieta):
<string> - Wyrażenie
<string>lub<script block>
Właściwości parametru
| Typ: | Object[] |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | True |
| DontShow: | False |
Zestawy parametrów
DefaultParameter
| Position: | 0 |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
SkipLastParameter
| Position: | 0 |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-Skip
Pomija (nie wybiera) określoną liczbę elementów. Domyślnie Pomiń liczbę parametrów od początku tablicy lub listy obiektów, ale jeśli polecenie używa parametru Last, zlicza się z końca listy lub tablicy.
W przeciwieństwie do parametru index
Właściwości parametru
| Typ: | Int32 |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
DefaultParameter
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-SkipLast
Pomija (nie wybiera) określoną liczbę elementów z końca listy lub tablicy. Działa w taki sam sposób, jak w przypadku używania Pomiń razem z parametrem Last.
W przeciwieństwie do parametru Index, który rozpoczyna się odliczania od 0, parametr SkipLast rozpoczyna się od 1.
Właściwości parametru
| Typ: | Int32 |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
SkipLastParameter
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-Unique
Określa, że jeśli podzbiór obiektów wejściowych ma identyczne właściwości i wartości, zostanie wybrany tylko jeden element członkowski podzestawu.
W tym parametrze jest uwzględniana wielkość liter. W związku z tym ciągi, które różnią się tylko wielkością znaków, są uważane za unikatowe.
Właściwości parametru
| Typ: | SwitchParameter |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
(All)
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
-Wait
Wskazuje, że polecenie cmdlet wyłącza optymalizację.
Program PowerShell uruchamia polecenia w kolejności, w której są wyświetlane w potoku poleceń i umożliwia generowanie wszystkich obiektów.
Jeśli domyślnie dołączysz polecenie Select-Object z parametrami First lub Index w potoku poleceń, program PowerShell zatrzymuje polecenie, które generuje obiekty zaraz po wygenerowaniu wybranej liczby obiektów.
Ten parametr został wprowadzony w programie Windows PowerShell 3.0.
Właściwości parametru
| Typ: | SwitchParameter |
| Domyślna wartość: | None |
| Obsługuje symbole wieloznaczne: | False |
| DontShow: | False |
Zestawy parametrów
DefaultParameter
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
IndexParameter
| Position: | Named |
| Obowiązkowe: | False |
| Wartość z potoku: | False |
| Wartość z potoku według nazwy właściwości: | False |
| Wartość z pozostałych argumentów: | False |
CommonParameters
To polecenie cmdlet obsługuje typowe parametry: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction i -WarningVariable. Aby uzyskać więcej informacji, zobacz about_CommonParameters.
Dane wejściowe
PSObject
Możesz przekazać dowolny obiekt do Select-Object.
Dane wyjściowe
PSObject
Uwagi
- Możesz również odwołać się do polecenia cmdlet
Select-Objectza pomocą wbudowanego aliasuselect. Aby uzyskać więcej informacji, zobacz about_Aliases. - Funkcja optymalizacji
Select-Objectjest dostępna tylko dla poleceń, które zapisują obiekty w potoku podczas ich przetwarzania. Nie ma to wpływu na polecenia, które buforują przetworzone obiekty i zapisują je jako kolekcję. Pisanie obiektów natychmiast jest najlepszym rozwiązaniem projektowym polecenia cmdlet. Aby uzyskać więcej informacji, zobacz Zapisywanie pojedynczych rekordów w potoku w zdecydowanie zachęcane wytyczne programistyczne w bibliotece MSDN.