Sdílet prostřednictvím


Select-Object

Vybere objekty nebo vlastnosti objektu.

Syntaxe

Select-Object
      [-InputObject <PSObject>]
      [[-Property] <Object[]>]
      [-ExcludeProperty <String[]>]
      [-ExpandProperty <String>]
      [-Unique]
      [-CaseInsensitive]
      [-Last <Int32>]
      [-First <Int32>]
      [-Skip <Int32>]
      [-Wait]
      [<CommonParameters>]
Select-Object
      [-InputObject <PSObject>]
      [[-Property] <Object[]>]
      [-ExcludeProperty <String[]>]
      [-ExpandProperty <String>]
      [-Unique]
      [-CaseInsensitive]
      [-Skip <Int32>]
      [-SkipLast <Int32>]
      [<CommonParameters>]
Select-Object
      [-InputObject <PSObject>]
      [-Unique]
      [-CaseInsensitive]
      [-Wait]
      [-Index <Int32[]>]
      [<CommonParameters>]
Select-Object
      [-InputObject <PSObject>]
      [-Unique]
      [-CaseInsensitive]
      [-SkipIndex <Int32[]>]
      [<CommonParameters>]

Description

Rutina Select-Object vybere zadané vlastnosti objektu nebo sady objektů. Může také vybrat jedinečné objekty, zadaný počet objektů nebo objekty v zadané pozici v poli.

Pokud chcete vybrat objekty z kolekce, použijte parametry First, Last, Unique, Skipa Index parametry. Pokud chcete vybrat vlastnosti objektu, použijte parametr vlastnosti. Když vyberete vlastnosti, Select-Object vrátí nové objekty, které mají pouze zadané vlastnosti.

Počínaje Windows PowerShellem 3.0 obsahuje Select-Object funkci optimalizace, která brání příkazům v vytváření a zpracování objektů, které se nepoužívají.

Pokud použijete Select-Object s parametry First nebo Index v kanálu příkazů, PowerShell zastaví příkaz, který vygeneruje objekty hned po dosažení vybraného počtu objektů. Pokud chcete toto chování optimalizace vypnout, použijte parametr Wait.

Příklady

Příklad 1: Výběr objektů podle vlastnosti

Tento příklad vytvoří objekty, které mají vlastnosti Name, IDa pracovní sada (WS) vlastností objekty procesu.

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

Příklad 2: Výběr objektů podle vlastnosti a formátování výsledků

Tento příklad získá informace o modulech používaných procesy v počítači. K získání procesu v počítači používá Get-Process rutinu.

Používá Select-Object rutinu k výstupu pole [System.Diagnostics.ProcessModule] instancí, jak je obsaženo v Modules vlastnost každého výstupu instance System.Diagnostics.ProcessGet-Process.

Parametr Vlastnost rutiny Select-Object vybere názvy procesů. Tím přidáte ProcessNameNoteProperty ke každé instanci [System.Diagnostics.ProcessModule] a naplní ji hodnotou vlastnosti ProcessName aktuálního procesu.

Nakonec Format-List rutina slouží k zobrazení názvu a modulů jednotlivých procesů v seznamu.

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

Příklad 3: Výběr procesů využívajících nejvíce paměti

Tento příklad získá pět procesů, které používají nejvíce paměti. Rutina Get-Process získá procesy v počítači. Rutina Sort-Object seřadí procesy podle využití paměti (pracovní sady) a Select-Object rutina vybere pouze posledních pět členů výsledného pole objektů.

Parametr Wait není vyžadován v příkazech, které obsahují rutinu Sort-Object, protože Sort-Object zpracuje všechny objekty a vrátí kolekci. Optimalizace Select-Object je k dispozici pouze pro příkazy, které vracejí objekty jednotlivě při jejich zpracování.

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

Příklad 4: Výběr jedinečných znaků z pole

Tento příklad používá parametr UniqueSelect-Object k získání jedinečných znaků z pole znaků.

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

a
b
c
A

Příklad 5: Použití parametru -Unique s jinými parametry

Parametr Unique filtruje hodnoty po použití jiných parametrů Select-Object. Pokud například použijete parametr First k výběru prvního počtu položek v poli, použije se Jedinečný pouze na vybrané hodnoty a ne na celé pole.

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

a

V tomto příkladu First vybere "a","a" jako prvních 2 položek v poli. jedinečné se použije na "a","a" a vrátí a jako jedinečnou hodnotu.

Příklad 6: Výběr jedinečných řetězců pomocí parametru -CaseInsensitive

Tento příklad používá porovnání bez rozlišování malých a velkých písmen k získání jedinečných řetězců z pole řetězců.

"aa", "Aa", "Bb", "bb" | Select-Object -Unique -CaseInsensitive

aa
Bb

Příklad 7: Výběr nejnovějších a nejstarších událostí v protokolu událostí

Tento příklad získá první (nejnovější) a poslední (nejstarší) události v protokolu událostí Windows PowerShellu.

Get-WinEvent získá všechny události v protokolu Windows PowerShellu a uloží je do proměnné $a. Potom se $a předá rutině Select-Object. Příkaz Select-Object používá parametr Index k výběru událostí z pole událostí v proměnné $a. Index první události je 0. Index poslední události je počet položek v $a minus 1.

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

Příklad 8: Výběr všech kromě prvního objektu

Tento příklad vytvoří novou psSession na všech počítačích uvedených v Servers.txt souborech s výjimkou první.

Select-Object vybere všechny kromě prvního počítače v seznamu názvů počítačů. Výsledný seznam počítačů se nastaví jako hodnota parametru ComputerName rutiny New-PSSession.

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

Příklad 9: Přejmenování souborů a výběr několika, které chcete zkontrolovat

Tento příklad přidá příponu -ro k základním názvům textových souborů, které mají atribut jen pro čtení, a pak zobrazí prvních pět souborů, aby uživatel viděl vzorek efektu.

Get-ChildItem k získání souborů jen pro čtení používá dynamický parametr Jen pro čtení. Výsledné soubory se předávají do rutiny Rename-Item, která soubor přejmenuje. Používá parametr PassThruRename-Item k odeslání přejmenovaných souborů do rutiny Select-Object, která vybere prvních 5 pro zobrazení.

Parametr WaitSelect-Object zabrání PowerShellu zastavit rutinu Get-ChildItem po získání prvních pěti textových souborů jen pro čtení. Bez tohoto parametru se přejmenuje jenom prvních pět souborů jen pro čtení.

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

Příklad 10: Zobrazení složitých parametrů -ExpandProperty

Tento příklad ukazuje intricacies ExpandProperty parametru.

Všimněte si, že výstup vygenerovaný byl polem [System.Int32] instancí. Instance odpovídají standardním formátovacím pravidlům výstupního zobrazení. To platí pro všechny vlastnosti Rozbalené. Pokud mají výstupní objekty určitý standardní formát, rozbalené vlastnosti nemusí být viditelné.

# 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

Příklad 11: Vytvoření vlastních vlastností u objektů

Následující příklad ukazuje použití Select-Object přidat vlastní vlastnost do libovolného objektu. Pokud zadáte název vlastnosti, který neexistuje, Select-Object vytvoří tuto vlastnost jako NoteProperty u každého předaného objektu.

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

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

Příklad 12: Vytvoření počítaných vlastností pro každý InputObject

Tento příklad ukazuje použití Select-Object k přidání počítaných vlastností do vstupu. Předání ScriptBlock parametru Vlastnost způsobí, že Select-Object vyhodnotí výraz u každého předaného objektu a přidá výsledky do výstupu. V ScriptBlockmůžete použít proměnnou $_ odkazovat na aktuální objekt v kanálu.

Ve výchozím nastavení Select-Object jako název vlastnosti používá řetězec ScriptBlock. Pomocí hashtablemůžete označit výstup ScriptBlock jako vlastní vlastnost přidanou do každého objektu. Do každého objektu předaného Select-Objectmůžete přidat více počítaných vlastností .

# 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

Příklad 13: Výběr klíčů hashtable bez použití počítaných vlastností

Počínaje PowerShellem 6 Select-Object podporuje výběr klíčů hashtable vstup jako vlastnosti. Následující příklad vybere weight a name klíče vstupní hashtable a zobrazí výstup.

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

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

Příklad 14: ExpandProperty změní původní objekt

Tento příklad ukazuje vedlejší účinek použití ExpandProperty parametru. Pokud použijete ExpandProperty, Select-Object přidá vybrané vlastnosti do původního objektu jako NoteProperty členy.

PS> $object = [PSCustomObject]@{
    name = 'USA'
    children = [PSCustomObject]@{
        name = 'Southwest'
    }
}
PS> $object

name children
---- --------
USA  @{name=Southwest}

# Use the ExpandProperty parameter to expand the children property
PS> $object | Select-Object @{n="country"; e={$_.name}} -ExpandProperty children

name      country
----      -------
Southwest USA

# The original object has been altered
PS> $object

name children
---- --------
USA  @{name=Southwest; country=USA}

Jak můžete vidět, vlastnost země byla přidána do objektu podřízených objektu po použití parametru ExpandProperty.

Příklad 15: Vytvoření nového objektu s rozbalenými vlastnostmi beze změny vstupního objektu

Můžete se vyhnout vedlejší efekt použití ExpandProperty parametr vytvořením nového objektu a zkopírováním vlastností ze vstupního objektu.

PS> $object = [PSCustomObject]@{
    name = 'USA'
    children = [PSCustomObject]@{
        name = 'Southwest'
    }
}
PS> $object

name children
---- --------
USA  @{name=Southwest}

# Create a new object with selected properties
PS> $newobject = [PSCustomObject]@{
    country = $object.name
    children = $object.children
}

PS> $newobject

country children
------- --------
USA     @{name=Southwest}

# $object remains unchanged
PS> $object

name children
---- --------
USA  @{name=Southwest}

Parametry

-CaseInsensitive

Pokud ve výchozím nastavení použijete parametr Unique, rutina používá porovnání s rozlišováním velkých a malých písmen. Při použití tohoto parametru používá rutina porovnání bez rozlišování velkých a malých písmen.

Tento parametr byl přidán v PowerShellu 7.4.

Typ:SwitchParameter
Position:Named
Default value:False
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-ExcludeProperty

Určuje vlastnosti, které tato rutina z operace vylučuje. Jsou povoleny zástupné cardy.

Počínaje PowerShellem 6 už není nutné zahrnout parametr Vlastnost pro ExcludeProperty fungovat.

Typ:String[]
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:True

-ExpandProperty

Určuje vlastnost, kterou chcete vybrat, a indikuje, že se má provést pokus o rozšíření této vlastnosti. Pokud kanál vstupního objektu nemá pojmenovanou vlastnost, Select-Object vrátí chybu.

  • Pokud je zadaná vlastnost matice, každá hodnota pole je zahrnuta ve výstupu.
  • Pokud je zadaná vlastnost objektem, vlastnosti objektů se rozbalí pro každý InputObject

V obou případech typ výstupních objektů odpovídá rozbalené vlastnosti Typ.

Poznámka

Existuje vedlejší účinek při použití ExpandProperty. Select-Object přidá vybrané vlastnosti do původního objektu jako NoteProperty členy.

Pokud je zadán parametr vlastnosti, Select-Object se pokusí přidat každou vybranou vlastnost jako NoteProperty do každého výstupního objektu.

Varování

Pokud se zobrazí chyba, že vlastnost nelze zpracovat, protože vlastnost s tímto názvem již existuje, zvažte následující. Všimněte si, že při použití ExpandProperty, Select-Object nemůže nahradit existující vlastnost. To znamená:

  • Pokud rozbalený objekt má vlastnost se stejným názvem, příkaz vrátí chybu.
  • Pokud má objekt Selected vlastnost stejného názvu jako vlastnost objektu Expanded, vrátí příkaz chybu.
Typ:String
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-First

Určuje počet objektů, které se mají vybrat od začátku pole vstupních objektů.

Typ:Int32
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Index

Vybere objekty z pole na základě jejich hodnot indexu. Zadejte indexy v seznamu odděleném čárkami. Indexy v poli začínají hodnotou 0, kde 0 představuje první hodnotu a (n-1) představuje poslední hodnotu.

Typ:Int32[]
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-InputObject

Určuje objekty, které se mají odeslat do rutiny prostřednictvím kanálu. Tento parametr umožňuje pipetovat objekty do Select-Object.

Když předáte objekty do parametru InputObject, Select-Object místo použití kanálu zachází InputObject jako s jedním objektem, i když je hodnota kolekce. Při předávání kolekcí do Select-Objectse doporučuje používat kanál.

Typ:PSObject
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-Last

Určuje počet objektů, které se mají vybrat z konce pole vstupních objektů.

Typ:Int32
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Property

Určuje vlastnosti, které se mají vybrat. Tyto vlastnosti jsou přidány jako NoteProperty členy do výstupních objektů. Jsou povoleny zástupné cardy. Pokud vstupní objekt nemá vlastnost s názvem, hodnota nového NoteProperty je nastavena na $null.

Hodnota parametru Vlastnost může být nová počítaná vlastnost. Pokud chcete vytvořit počítanou vlastnost, použijte tabulku hash.

Platné klíče jsou:

  • Název (nebo popisek) – <string>
  • Výraz – <string> nebo <script block>

Další informace naleznete v tématu about_Calculated_Properties.

Typ:Object[]
Position:0
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:True

-Skip

Přeskočí (nevybere) zadaný počet položek. Ve výchozím nastavení Přeskočit parametr počítá od začátku kolekce objektů. Pokud příkaz používá parametr Last, počítá se z konce kolekce.

Na rozdíl od parametru indexu, který začíná počítat na 0, začíná parametr Přeskočit začíná na 1.

Počínaje PowerShellem 7.4 můžete pomocí parametru Přeskočit s parametrem SkipLast přeskočit položky od začátku i konce kolekce.

Typ:Int32
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-SkipIndex

Přeskočí (nevybere) objekty z pole na základě jejich hodnot indexu. Zadejte indexy v seznamu odděleném čárkami. Indexy v poli začínají hodnotou 0, kde 0 představuje první hodnotu a (n-1) představuje poslední hodnotu.

Tento parametr byl představen ve Windows PowerShellu 6.0.

Typ:Int32[]
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-SkipLast

Přeskočí (nevybere) zadaný počet položek na konci seznamu nebo pole. Funguje stejně jako použití Přeskočit společně s parametrem Last.

Na rozdíl od parametru Index, který začíná počítat na 0, začíná parametr SkipLast začíná na 1.

Počínaje PowerShellem 7.4 můžete pomocí parametru Přeskočit s parametrem SkipLast přeskočit položky od začátku i konce kolekce.

Typ:Int32
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Unique

Určuje, že pokud má podmnožina vstupních objektů identické vlastnosti a hodnoty, je třeba vybrat pouze jeden člen podmnožinu.

Po použití dalších parametrů filtrování vybere jedinečnéhodnoty.

U tohoto parametru se rozlišují malá a velká písmena. Výsledkem je, že řetězce, které se liší pouze v písmenech znaků, jsou považovány za jedinečné. Přidejte parametr CaseInsensitive pro porovnání bez rozlišování velkých a malých písmen.

Typ:SwitchParameter
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-Wait

Označuje, že rutina vypne optimalizaci. PowerShell spouští příkazy v pořadí, v jakém se zobrazují v kanálu příkazů, a umožňuje generovat všechny objekty. Pokud ve výchozím nastavení zahrnete příkaz Select-Object s parametrem First nebo Index v kanálu příkazů, PowerShell zastaví příkaz, který vygeneruje objekty, jakmile se vygeneruje vybraný počet objektů.

Tento parametr byl představen ve Windows PowerShellu 3.0.

Typ:SwitchParameter
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

Vstupy

PSObject

Objekty můžete do této rutiny pipetovat.

Výstupy

PSObject

Tato rutina vrátí vstupní objekty pouze s vybranými vlastnostmi.

Poznámky

PowerShell obsahuje následující aliasy pro Select-Object:

  • Všechny platformy:
    • select

Funkce optimalizace Select-Object je dostupná jenom pro příkazy, které zapisují objekty do kanálu při jejich zpracování. Nemá žádný vliv na příkazy, které uloží do vyrovnávací paměti zpracovávané objekty a zapisují je jako kolekci. Okamžité psaní objektů je osvědčeným postupem návrhu rutiny. Další informace najdete v tématu Zápis jednotlivých záznamů do kanálu v důrazně doporučujeme pokyny pro vývoj.