Sdílet prostřednictvím


Select-Object

Vybere objekty nebo vlastnosti objektu.

Syntaxe

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

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 Select-Object obsahuje funkci optimalizace, která brání příkazům v vytváření a zpracování objektů, které se nepoužívají.

Pokud do kanálu příkazů zahrnete příkaz Select-ObjectFirst nebo Index, PowerShell zastaví příkaz, který vygeneruje objekty hned po vygenerování vybraného počtu objektů, i když se příkaz, který vygeneruje objekty, zobrazí před příkazem Select-Object v kanálu. Pokud chcete toto chování optimalizace vypnout, použijte parametr Wait.

Příklady

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

Tento příkaz vytvoří objekty, které mají vlastnosti Name, IDa pracovní sadu (WS) vlastností procesních objektů.

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říkaz 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.

Příkaz používá k výběru názvů procesů parametr vlastnosti rutiny. Tím přidáte ProcessNameNoteProperty do každé instance [System.Diagnostics.ProcessModule] a naplníte ji hodnotou aktuálních procesů ProcessName vlastnost.

Příkaz používá rutinu Format-List k zobrazení názvu a modulů v každém procesu 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říkaz 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říkaz 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

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

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

Příkaz používá rutinu Get-EventLog k získání všech událostí v protokolu Prostředí Windows PowerShell. Uloží je do proměnné $a.

Druhý příkaz používá operátor kanálu (|) k odeslání událostí v $a do rutiny 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-EventLog -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($A.count - 1)

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

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

Tento příkaz používá rutinu Select-Object k výběru všech 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 7: Přejmenování souborů a výběr několika, které chcete zkontrolovat

Tento příkaz 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 ukázku efektu.

Příkaz používá k získání souborů jen pro čtení dynamický parametr ReadOnly rutiny Get-ChildItem pro FileSystem. Pomocí operátoru kanálu (|) odešle soubory do rutiny Rename-Item, která soubor přejmenuje. Pomocí parametru PassthruRename-Item odešle přejmenované soubory 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 8: Předvedení 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), 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

Příklad 9: 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 10: 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žije řetězec Script Block. 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

Parametry

-ExcludeProperty

Určuje vlastnosti, které tato rutina z operace vylučuje. Jsou povoleny zástupné cardy. Tento parametr je efektivní pouze v případě, že příkaz obsahuje také parametr Vlastnost.

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 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 bude výstup typu typu objektů odpovídat Type rozbalené vlastnosti.

Pokud je zadán parametr Vlastnost, 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: Select : Vlastnost nelze zpracovat, protože vlastnost <PropertyName> 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 má rozbalený objekt vlastnost se stejným názvem, dojde k chybě.
  • Pokud má objekt Selected vlastnost se stejným názvem jako vlastnost Rozbalené objekty, dojde k chybě.
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.

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>
  • <string> výrazu nebo <script block>
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 pole nebo seznamu objektů, ale pokud příkaz používá parametr Poslední, počítá se od konce seznamu nebo pole.

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

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.

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, bude vybrán pouze jeden člen podmnožina.

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

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

Do Select-Objectmůžete převést libovolný objekt .

Výstupy

PSObject

Poznámky

  • Můžete také odkazovat na Select-Object rutinu pomocí integrovaného aliasu select. Další informace naleznete v tématu about_Aliases.
  • Funkce optimalizace Select-Object 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 jednoduchých záznamů do kanálu v důrazně doporučujeme pokyny pro vývoj v knihovně MSDN.