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, Skip a Index . Chcete-li vybrat vlastnosti objektu , použijte parametr Property . Při výběru vlastností vrátí nové objekty, Select-Object které mají pouze zadané vlastnosti.

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

Pokud použijete Select-Object parametry First nebo Index v kanálu příkazu, PowerShell zastaví příkaz, který vygeneruje objekty, jakmile dojde k 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, ID a pracovní sady (WS) objektů 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. Používá Get-Process rutinu k získání procesu v počítači.

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

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

Format-List Nakonec se rutina používá 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 zpracovává všechny objekty a vrací kolekci. Optimalizace Select-Object je k dispozici pouze pro příkazy, které vrací 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 Unique k získání jedinečných Select-Object 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

Jedinečné parametry filtrují hodnoty po použití jiných Select-Object parametrů. Pokud například pomocí prvního parametru vyberete první počet položek v poli, použije se u vybraných hodnot, a ne na celou matici.

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

a

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

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 $a proměnné. $a Pak se předá rutiněSelect-Object. Příkaz Select-Object používá parametr Index k výběru událostí z pole událostí v $a proměnné. Index první události je 0. Index poslední události je počet položek minus $a 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 soubory 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čů je nastaven 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-ChildItempoužívá dynamický parametr ReadOnly k získání souborů jen pro čtení. Výsledné soubory se předávají rutině Rename-Item , která soubor přejmenuje. Používá parametr Rename-Item PassThru k odeslání přejmenovaných souborů do Select-Object rutiny, která vybere prvních 5 pro zobrazení.

Parametr Select-Object Wait zabrání PowerShellu zastavit rutinuGet-ChildItem, jakmile získá prvních pět 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žitosti parametru -ExpandProperty

Tento příklad ukazuje složitosti ExpandProperty parametru.

Všimněte si, že výstup vygenerovaný byl pole [System.Int32] instancí. Instance odpovídají standardním pravidlům formátování výstupního zobrazení. To platí pro všechny rozbalené vlastnosti. 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 k přidání vlastní vlastnosti 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 Property způsobí Select-Object vyhodnocení výrazu u každého předaného objektu a přidání výsledků do výstupu. V rámci ScriptBlock můžete pomocí $_ proměnné odkazovat na aktuální objekt v kanálu.

Ve výchozím nastavení Select-Object používá ScriptBlock řetězec jako název vlastnosti. Pomocí hashtable můž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íčů vstupu hashtable jako vlastností. 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, země vlastnost byla přidána do podřízeného objektu po použití ExpandProperty parametru.

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 parametru 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 použijete parametr Unique , rutina ve výchozím nastavení 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 Property pro ExcludeProperty , aby fungoval.

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 objekt, vlastnosti objektů se rozbalí pro každý InputObject.

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

Poznámka:

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

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

Upozorňující

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í ExpandPropertySelect-Object nelze nahradit existující vlastnost. To znamená:

  • Pokud rozbalený objekt má vlastnost se stejným názvem, příkaz vrátí chybu.
  • Pokud má vybraný objekt vlastnost se stejným názvem jako Vlastnost Rozbalený objekt, 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 inputObject parametru, namísto použití kanálu, Select-Object zpracovává InputObject jako jeden objekt, i když je hodnota kolekce. Doporučujeme použít kanál při předávání kolekcí do Select-Object.

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 se přidají jako členy NoteProperty do výstupních objektů. Jsou povoleny zástupné cardy. Pokud vstupní objekt nemá vlastnost s názvem, hodnota nové NoteProperty je nastavena na $null.

Hodnota parametru Property 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 najdete 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í se parametr Skip počítá od začátku kolekce objektů. Pokud příkaz používá poslední parametr, počítá se z konce kolekce.

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

Počínaje PowerShellem 7.4 můžete pomocí parametru 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ým způsobem jako funkce Skip společně s posledním parametrem.

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

Počínaje PowerShellem 7.4 můžete pomocí parametru 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.

Jedinečné výběry hodnot po použití jiných parametrů filtrování.

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 provádění 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 do kanálu příkazů zahrnete Select-Object příkaz s parametry First nebo Index , 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 Select-Object optimalizace je k dispozici pouze 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 pokynech pro vývoj důrazně doporučujeme.