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.Process
Get-Process
.
Parametr Vlastnost rutiny Select-Object
vybere názvy procesů. Tím přidáte ProcessName
NoteProperty 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-Object
můž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-Object
se 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
Objekty můžete do této rutiny pipetovat.
Výstupy
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.