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 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-Object
First 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.Process
Get-Process
.
Příkaz používá k výběru názvů procesů parametr vlastnosti ProcessName
NoteProperty
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-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
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-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.
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
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
Do Select-Object
můžete převést libovolný objekt .
Výstupy
Poznámky
- Můžete také odkazovat na
Select-Object
rutinu pomocí integrovaného aliasuselect
. 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.