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-ChildItem
použí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-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íčů 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
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 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.