Select-Object

Wybiera obiekty lub właściwości obiektu.

Składnia

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

Opis

Polecenie Select-Object cmdlet 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, Skip i Index . Aby wybrać właściwości obiektu, użyj parametru Właściwość . Po wybraniu właściwości Select-Object zwracane są nowe obiekty, które mają tylko określone właściwości.

Począwszy od Windows PowerShell 3.0, Select-Object zawiera funkcję optymalizacji, która uniemożliwia tworzenie i przetwarzanie obiektów, które nie są używane.

Po dołączeniu Select-Object polecenia 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 przed Select-Object poleceniem w potoku. Aby wyłączyć to optymalizowanie zachowania, użyj parametru Wait .

Przykłady

Przykład 1. Wybieranie obiektów według właściwości

W tym przykładzie są tworzone obiekty, które mają właściwości Name, ID i Working Set (WS) obiektów procesu.

Get-Process | Select-Object -Property ProcessName, Id, WS

Przykład 2. Wybieranie obiektów według właściwości i formatowanie wyników

Ten przykład pobiera informacje o modułach używanych przez procesy na komputerze. Używa Get-Process polecenia cmdlet do pobrania procesu na komputerze.

Używa Select-Object polecenia cmdlet do wyprowadzania tablicy [System.Diagnostics.ProcessModule] wystąpień zawartych we właściwości Modules poszczególnych System.Diagnostics.Process wystąpień wyjściowych przez .Get-Process

Parametr Select-ObjectWłaściwości polecenia cmdlet wybiera nazwy procesów. Spowoduje to dodanie ProcessNamewłaściwości NoteProperty do każdego [System.Diagnostics.ProcessModule] wystąpienia i wypełnienie go wartością właściwości ProcessName bieżącego procesu.

Format-List Na koniec polecenie cmdlet służy do wyświetlania nazwy i modułów każdego procesu 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

Ten przykład pobiera pięć procesów korzystających z największej ilości pamięci. Polecenie Get-Process cmdlet pobiera procesy na komputerze. Polecenie Sort-Object cmdlet sortuje procesy zgodnie z użyciem pamięci (zestawu roboczego), a Select-Object polecenie cmdlet wybiera tylko pięć ostatnich elementów członkowskich wynikowej tablicy obiektów.

Parametr Wait nie jest wymagany w poleceniach zawierających Sort-Object polecenie cmdlet, 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

W tym przykładzie użyto unikatowego parametru , Select-Object aby uzyskać unikatowe znaki z tablicy znaków.

"a","b","c","a","a","a" | Select-Object -Unique

a
b
c

Przykład 5. Używanie parametrów "-Unique" z innymi parametrami

Unikatowy parametr filtruje wartości po zastosowaniu innych Select-Object parametrów. Jeśli na przykład użyjesz pierwszego parametru, aby wybrać pierwszą liczbę elementów w tablicy, wartość Unique jest stosowana tylko do wybranych wartości, a nie do całej tablicy.

"a","a","b","c" | Select-Object -First 2 -Unique

a

W tym przykładzie najpierw wybiera "a","a" się jako pierwsze 2 elementy w tablicy. Wartość unikatowa jest stosowana do "a","a" wartości i zwracana a jako unikatowa wartość.

Przykład 6. Wybieranie najnowszych i najstarszych zdarzeń w dzienniku zdarzeń

Ten przykład pobiera pierwsze (najnowsze) i ostatnie (najstarsze) zdarzenia w dzienniku zdarzeń Windows PowerShell.

Get-EventLogpobiera wszystkie zdarzenia w dzienniku Windows PowerShell i zapisuje je w zmiennej$a. $a Następnie jest potokowy do Select-Object polecenia cmdlet. Polecenie Select-Object używa parametru Index do wybierania zdarzeń z tablicy zdarzeń w zmiennej $a . Indeks pierwszego zdarzenia to 0. Indeks ostatniego zdarzenia to liczba elementów z $a minus 1.

$a = Get-EventLog -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($A.count - 1)

Przykład 7. Zaznacz wszystko, ale pierwszy obiekt

W tym przykładzie zostanie utworzona nowa usługa PSSession na każdym z komputerów wymienionych w plikach Servers.txt z wyjątkiem pierwszego.

Select-Object wybiera wszystkie, ale pierwszy komputer na liście nazw komputerów. Wynikowa lista komputerów jest ustawiana jako wartość parametru New-PSSessionComputerName polecenia cmdlet.

New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)

Przykład 8. Zmiana nazwy plików i wybranie kilku do przejrzenia

W tym przykładzie dodano 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.

Get-ChildItem używa parametru dynamicznego ReadOnly do pobierania plików tylko do odczytu. Wynikowe pliki są przesyłane potokami Rename-Item do polecenia cmdlet, które zmienia nazwę pliku. Używa parametru PassThru do Rename-Item wysyłania zmienionych plików do Select-Object polecenia cmdlet, który wybiera pierwsze 5 do wyświetlenia.

Parametr Select-ObjectWait uniemożliwia programowi PowerShell zatrzymanie polecenia cmdlet po otrzymaniu Get-ChildItem pierwszych pięciu plików tekstowych tylko do odczytu. Bez tego parametru zmieniono nazwę tylko pierwszych pięciu plików tylko do odczytu.

Get-ChildItem *.txt -ReadOnly |
    Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru |
    Select-Object -First 5 -Wait

Przykład 9. Wyświetlanie zawiłości parametru -ExpandProperty

W tym przykładzie przedstawiono zawiłości parametru ExpandProperty .

Pamiętaj, że wygenerowane dane wyjściowe były tablicą [System.Int32] wystąpień. 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), ...
Equals      Method       bool Equals(System.Object obj), bool Equals(int obj), bool IEq...
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
GetTypeCode Method       System.TypeCode GetTypeCode(), System.TypeCode IConvertible.Ge...
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 ToS...
ToType      Method       System.Object IConvertible.ToType(type conversionType, System...
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 10. Tworzenie właściwości niestandardowych w obiektach

W poniższym przykładzie pokazano użycie polecenia 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 właściwość NoteProperty dla każdego przekazanego obiektu.

$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject

MyCustomProperty
----------------
New Custom Property

Przykład 11. Tworzenie właściwości obliczeniowych dla każdego obiektu InputObject

W tym przykładzie pokazano użycie polecenia Select-Object w celu dodania właściwości obliczeniowych do danych wejściowych. Przekazanie elementu ScriptBlock do parametru Property powoduje Select-Object ocenę wyrażenia dla każdego przekazanego obiektu i dodanie wyników do danych wyjściowych. W elemencie ScriptBlock można użyć zmiennej $_ , aby odwołać się do bieżącego obiektu w potoku.

Domyślnie Select-Object używa ciągu ScriptBlock jako nazwy właściwości. Za pomocą tabeli skrótowej można oznaczyć dane wyjściowe elementu ScriptBlock jako właściwość niestandardową dodaną do każdego obiektu. Do każdego obiektu przekazanego do obiektu można dodać wiele właściwości obliczeniowych Select-Object.

# 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

Przykład 12. Wybieranie kluczy w formie skrótu bez używania właściwości obliczeniowych

Począwszy od programu PowerShell 6, Select-Object obsługuje wybieranie kluczy danych wejściowych w formie skrótu jako właściwości. Poniższy przykład wybiera weight klucze i name w tabeli skrótu wejściowego i wyświetla dane wyjściowe.

@{ name = 'a' ; weight = 7 } | Select-Object -Property name, weight

name weight
---- ------
a         7

Parametry

-ExcludeProperty

Określa właściwości, które to polecenie cmdlet wyklucza z operacji. Dozwolone są symbole wieloznaczne.

Począwszy od programu PowerShell 6, nie jest już wymagane uwzględnienie parametru Właściwości dla właściwości ExcludeProperty do działania.

Type:String[]
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:True

-ExpandProperty

Określa właściwość do wybrania i wskazuje, że należy podjąć próbę rozwinięcia tej właściwości.

  • 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żdego obiektu InputObject

W obu przypadkach typ obiektów wyjściowych jest zgodny z typem rozwiniętej właściwości.

Jeśli określono parametr Właściwość , Select-Object próbuje dodać każdą wybraną właściwość jako właściwość NoteProperty do każdego obiektu wyjściowego.

Ostrzeżenie

Jeśli zostanie wyświetlony błąd, że nie można przetworzyć właściwości, ponieważ właściwość o tej nazwie już istnieje, rozważ następujące kwestie. Należy pamiętać, Select-Object że w przypadku używania właściwości ExpandProperty nie można zastąpić istniejącej właściwości. Składają się na to następujące elementy:

  • Jeśli rozwinięty obiekt ma właściwość o tej samej nazwie, polecenie zwraca błąd.
  • Jeśli obiekt Selected ma właściwość o tej samej nazwie co właściwość obiektu Rozwinięte , polecenie zwraca błąd.
Type:String
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-First

Określa liczbę obiektów do wybrania od początku tablicy obiektów wejściowych.

Type:Int32
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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ść.

Type:Int32[]
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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-Objectobiektu .

Gdy przekazujesz obiekty do parametru InputObject , zamiast używać potoku, Select-Object traktuje obiekt InputObject jako pojedynczy obiekt, nawet jeśli wartość jest kolekcją. Zaleca się użycie potoku podczas przekazywania kolekcji do elementu Select-Object.

Type:PSObject
Position:Named
Default value:None
Accept pipeline input:True
Accept wildcard characters:False

-Last

Określa liczbę obiektów do wybrania na końcu tablicy obiektów wejściowych.

Type:Int32
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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. Dozwolone są symbole wieloznaczne.

Wartość parametru Property może być nową właściwością obliczeniową. Aby utworzyć obliczenie, użyj tabeli skrótów.

Prawidłowe klucze to:

  • Nazwa (lub etykieta) — <string>
  • Wyrażenie — <string> lub <script block>

Aby uzyskać więcej informacji, zobacz about_Calculated_Properties.

Type:Object[]
Position:0
Default value:None
Accept pipeline input:False
Accept wildcard characters:True

-Skip

Pomija (nie wybiera) określoną liczbę elementów. Domyślnie parametr Skip liczy się od początku tablicy lub listy obiektów, ale jeśli polecenie używa ostatniego parametru, liczy się od końca listy lub tablicy.

W przeciwieństwie do parametru Index , który zaczyna liczyć na 0, parametr Skip zaczyna się od 1.

Type: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

Pomija (nie wybiera) określoną liczbę elementów na końcu listy lub tablicy. Działa w taki sam sposób, jak użycie polecenia Pomiń razem z parametrem Last .

W przeciwieństwie do parametru Index , który zaczyna liczyć na 0, parametr SkipLast zaczyna się od 1.

Type:Int32
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

-Unique

Określa, że jeśli podzbiór obiektów wejściowych ma identyczne właściwości i wartości, należy wybrać tylko jeden element członkowski podzestawu.

Unikatowe wybiera wartości po zastosowaniu innych parametrów filtrowania.

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.

Type:SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters: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. Domyślnie, jeśli do potoku poleceń dołączysz Select-Object polecenie z parametrami First lub Index , program PowerShell zatrzymuje polecenie, które generuje obiekty zaraz po wygenerowaniu wybranej liczby obiektów.

Ten parametr został wprowadzony w Windows PowerShell 3.0.

Type:SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False

Dane wejściowe

PSObject

Obiekty można potokować do tego polecenia cmdlet.

Dane wyjściowe

PSObject

To polecenie cmdlet zwraca obiekty wejściowe tylko z wybranymi właściwościami.

Uwagi

Program PowerShell zawiera następujące aliasy dla Select-Objectprogramu :

  • Wszystkie platformy:
    • select

Funkcja Select-Object optymalizacji jest dostępna tylko dla poleceń, które zapisują obiekty w potoku podczas ich przetwarzania. Nie ma wpływu na polecenia, które buforują przetworzone obiekty i zapisują je jako kolekcję. Pisanie obiektów natychmiast jest najlepszym rozwiązaniem w zakresie projektowania poleceń cmdlet. Aby uzyskać więcej informacji, zobacz Zapisywanie pojedynczych rekordów w potoku w zdecydowanie zachęcanych wytycznych dotyczących programowania.