Select-Object
Objektumok vagy objektumtulajdonságok kijelölése.
Syntax
Select-Object
[[-Property] <Object[]>]
[-InputObject <psobject>]
[-ExcludeProperty <string[]>]
[-ExpandProperty <string>]
[-Unique]
[-Last <int>]
[-First <int>]
[-Skip <int>]
[-Wait]
[<CommonParameters>]
Select-Object
[[-Property] <Object[]>]
[-InputObject <psobject>]
[-ExcludeProperty <string[]>]
[-ExpandProperty <string>]
[-Unique]
[-SkipLast <int>]
[<CommonParameters>]
Select-Object
[-InputObject <psobject>]
[-Unique]
[-Wait]
[-Index <int[]>]
[<CommonParameters>]
Description
A Select-Object
parancsmag egy objektum vagy objektumkészlet megadott tulajdonságait választja ki. Egyedi objektumokat, meghatározott számú objektumot vagy objektumot is kijelölhet egy tömb megadott pozíciójában.
Ha objektumokat szeretne kijelölni egy gyűjteményből, használja az Első, az Utolsó, az Egyedi, a Kihagyás és az Index paramétert. Objektumtulajdonságok kiválasztásához használja a Tulajdonság paramétert. A tulajdonságok kiválasztásakor olyan új objektumokat ad vissza, Select-Object
amelyek csak a megadott tulajdonságokkal rendelkeznek.
A Windows PowerShell 3.0-tól kezdődően olyan optimalizálási funkcióval rendelkezik, amely megakadályozza, Select-Object
hogy a parancsok ne hozzanak létre és dolgozzanak fel nem használt objektumokat.
Ha a parancsfolyamat Első vagy Index paraméterét használjaSelect-Object
, a PowerShell leállítja az objektumokat létrehozó parancsot, amint eléri a kijelölt számú objektumot. Az optimalizálási viselkedés kikapcsolásához használja a Wait paramétert.
Példák
1. példa: Objektumok kijelölése tulajdonság szerint
Ez a példa olyan objektumokat hoz létre, amelyek a folyamatobjektumok Név, Azonosító és Munkakészlet (WS) tulajdonságával rendelkeznek.
Get-Process | Select-Object -Property ProcessName, Id, WS
2. példa: Objektumok kijelölése tulajdonság szerint és az eredmények formázása
Ez a példa a számítógépen futó folyamatok által használt modulokkal kapcsolatos információkat kap. Parancsmagot használ Get-Process
a folyamat számítógépen való lekéréséhez.
A parancsmaggal Select-Object
egy példánytömböt [System.Diagnostics.ProcessModule]
ad ki az egyes System.Diagnostics.Process
példányok Get-Process
Modulok tulajdonságában szereplő módon.
A parancsmag Tulajdonság paramétere Select-Object
kiválasztja a folyamatneveket. Ez minden [System.Diagnostics.ProcessModule]
példányhoz hozzáad egy ProcessName
NoteProperty értéket, és feltölti az aktuális folyamat ProcessName tulajdonságának értékével.
Végül a Format-List
parancsmag az egyes folyamatok nevét és moduljait jeleníti meg egy listában.
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
...
3. példa: A legtöbb memóriát használó folyamatok kiválasztása
Ez a példa azt az öt folyamatot kapja meg, amelyek a legtöbb memóriát használják. A Get-Process
parancsmag lekéri a folyamatokat a számítógépen. A Sort-Object
parancsmag a memóriának (munkakészletnek) megfelelően rendezi a folyamatokat, és a Select-Object
parancsmag csak az eredményül kapott objektumtömb utolsó öt tagját választja ki.
A Várakozás paraméter nem szükséges a Sort-Object
parancsmagot tartalmazó parancsokban, mert Sort-Object
az összes objektumot feldolgozza, majd egy gyűjteményt ad vissza. Az Select-Object
optimalizálás csak olyan parancsok esetében érhető el, amelyek a feldolgozásuk során egyenként adnak vissza objektumokat.
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
4. példa: Egyedi karakterek kijelölése tömbből
Ez a példa az Egyedi paramétert Select-Object
használja, hogy egyedi karaktereket szerezzen be egy karaktertömbből.
"a","b","c","a","a","a" | Select-Object -Unique
a
b
c
5. példa: "-Unique" használata más paraméterekkel
Az Egyedi paraméter más Select-Object
paraméterek alkalmazása után szűri az értékeket. Ha például az Első paramétert használja a tömb első számú elemének kiválasztásához, az Egyedi érték csak a kijelölt értékekre lesz alkalmazva, a teljes tömbre nem.
"a","a","b","c" | Select-Object -First 2 -Unique
a
Ebben a példában az Első elem a tömb első 2 elemeként van kiválasztva "a","a"
. Az egyedi érték egyedi értékként lesz alkalmazva "a","a"
és visszaadva a
.
6. példa: A legújabb és legrégebbi események kiválasztása az eseménynaplóban
Ez a példa lekéri az első (legújabb) és az utolsó (legrégebbi) eseményt a Windows PowerShell eseménynaplójában.
Get-EventLog
lekéri a Windows PowerShell-napló összes eseményét, és menti őket a $a
változóba.
$a
Ezután a parancsmagba Select-Object
lesz csövezve. A Select-Object
parancs az Index paraméter használatával választja ki az eseményeket a $a
változó eseménytömbjében. Az első esemény indexe 0. Az utolsó esemény indexe a mínusz 1 elemből álló $a
elemek száma.
$a = Get-EventLog -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($A.count - 1)
7. példa: Az első objektum ki nem választása
Ez a példa új PSSession-t hoz létre a Servers.txt fájlokban felsorolt számítógépeken, kivéve az elsőt.
Select-Object
a számítógépnevek listájában az első számítógép ki nem választja az összeset. Az eredményként kapott számítógépek listája a parancsmag ComputerName paraméterének New-PSSession
értékeként van beállítva.
New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)
8. példa: Fájlok átnevezése és több elem kijelölése a véleményezéshez
Ez a példa hozzáad egy "-ro" utótagot az írásvédett attribútummal rendelkező szövegfájlok alapnevéhez, majd megjeleníti az első öt fájlt, hogy a felhasználó láthassa az effektus mintáját.
Get-ChildItem
A ReadOnly dinamikus paramétert használja az írásvédett fájlok lekéréséhez. Az eredményként kapott fájlok a Rename-Item
parancsmagba lesznek állítva, amely átnevezi a fájlt. A PassThru paraméter Rename-Item
használatával elküldi az átnevezett fájlokat a Select-Object
parancsmagnak, amely kiválasztja az első 5-öt a megjelenítéshez.
A Wait paraméter megakadályozza, Select-Object
hogy a PowerShell leállítsa a Get-ChildItem
parancsmagot az első öt írásvédett szövegfájl leolvasása után. E paraméter nélkül csak az első öt írásvédett fájl lesz átnevezve.
Get-ChildItem *.txt -ReadOnly |
Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru |
Select-Object -First 5 -Wait
9. példa: A -ExpandProperty paraméter bonyolultságainak megjelenítése
Ez a példa az ExpandProperty paraméter bonyolultságait mutatja be.
Vegye figyelembe, hogy a létrehozott kimenet példányok tömbje [System.Int32]
volt. A példányok megfelelnek a Kimeneti nézet szabványos formázási szabályainak. Ez minden kibontott tulajdonságra igaz. Ha a kimeneti objektumok egy adott szabványos formátummal rendelkeznek, előfordulhat, hogy a kibontott tulajdonság nem látható.
# 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
10. példa: Egyéni tulajdonságok létrehozása objektumokon
Az alábbi példa bemutatja, hogy egyéni Select-Object
tulajdonságot adhat hozzá bármely objektumhoz.
Ha olyan tulajdonságnevet ad meg, amely nem létezik, Select-Object
ezt a tulajdonságot minden átadott objektumon NotePropertyként hozza létre.
$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject
MyCustomProperty
----------------
New Custom Property
11. példa: Számított tulajdonságok létrehozása az egyes InputObjectekhez
Ez a példa bemutatja, hogy a bemenethez számított tulajdonságokat adhat Select-Object
hozzá. A ScriptBlock tulajdonságparaméternek való átadásával Select-Object
kiértékeli az egyes átadott objektumok kifejezését, és hozzáadja az eredményeket a kimenethez. A ScriptBlockban a $_
változóval hivatkozhat a folyamat aktuális objektumára.
Alapértelmezés szerint Select-Object
a ScriptBlock sztringet használja a tulajdonság neveként. Hashtable használatával a ScriptBlock kimenetét egyéni tulajdonságként címkézheti fel az egyes objektumokhoz. Az átadott Select-Object
objektumokhoz több számított tulajdonság is hozzáadható.
# 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
12. példa: Egy számított tulajdonságokkal rendelkező kivonatoló kulcsainak kiválasztása
Ez a példa bemutatja, hogyan jelenítheti Select-Object
meg egy kivonatoló objektum kulcs-érték párjait számított tulajdonságokkal. Minden számított tulajdonság kivonatolója az új tulajdonság címkéjét adja meg a kulcs megjelenítendő neveként, valamint egy kifejezést, amely lekéri az adott kulcs értékét.
@{ name = 'a' ; weight = 7 } | Select-Object -Property @(
@{ label = 'Name' ; expression = { $_.name } }
@{ label = 'Weight' ; expression = { $_.weight } }
)
Name Weight
---- ------
a 7
13. példa – Az ExpandProperty módosítja az eredeti objektumot
Ez a példa az ExpandProperty paraméter használatának mellékhatását mutatja be. Az ExpandPropertySelect-Object
használatakor a kijelölt tulajdonságokat NoteProperty-tagokként adja hozzá az eredeti objektumhoz.
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}
Mint látható, az országtulajdonság az ExpandProperty paraméter használata után lett hozzáadva a gyermekobjektumhoz.
14. példa – Új objektum létrehozása kibontott tulajdonságokkal a bemeneti objektum módosítása nélkül
Az ExpandProperty paraméter használatának mellékhatását elkerülheti egy új objektum létrehozásával és a bemeneti objektum tulajdonságainak másolásával.
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}
Paraméterek
-ExcludeProperty
Megadja azokat a tulajdonságokat, amelyeket ez a parancsmag kizár a műveletből. Helyettesítő karakterek használata engedélyezett. Ez a paraméter csak akkor érvényes, ha a parancs a Tulajdonság paramétert is tartalmazza.
Típus: | String[] |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | True |
-ExpandProperty
Megadja a kijelölendő tulajdonságot, és azt jelzi, hogy meg kell kísérelni a tulajdonság kibontására. Ha a bemeneti objektum folyamatának nincs elnevezve a tulajdonság, Select-Object
hibát ad vissza.
- Ha a megadott tulajdonság egy tömb, a kimenet a tömb minden értékét tartalmazza.
- Ha a megadott tulajdonság egy objektum, az objektumtulajdonságok minden InputObject esetében ki lesznek bontva
Mindkét esetben a kimeneti objektumok típusa megegyezik a kibontott tulajdonság Típus típusával.
Feljegyzés
Az ExpandProperty használatakor mellékhatások lépnek fel. A Select-Object
kijelölt tulajdonságokat a NoteProperty-tagokként adja hozzá az eredeti objektumhoz.
Ha a Tulajdonság paraméter meg van adva, Select-Object
minden egyes kijelölt tulajdonságot megkísérli NotePropertyként hozzáadni minden kimeneti objektumhoz.
Figyelmeztetés
Ha hibaüzenetet kap arról, hogy egy tulajdonság nem dolgozható fel, mert már létezik ilyen nevű tulajdonság, vegye figyelembe az alábbiakat. Vegye figyelembe, hogy az ExpandProperty Select-Object
használatakor nem lehet lecserélni egy meglévő tulajdonságot. Ez a következőket jelenti:
- Ha a kibontott objektumnak azonos nevű tulajdonsága van, a parancs hibát ad vissza.
- Ha a kijelölt objektumnak a kibontott objektum tulajdonságával azonos nevű tulajdonsága van, a parancs hibát ad vissza.
Típus: | String |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-First
Megadja a bemeneti objektumok tömbjének elejétől kiválasztandó objektumok számát.
Típus: | Int32 |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-Index
Objektumokat jelöl ki egy tömbből az indexértékük alapján. Írja be az indexeket egy vesszővel tagolt listában. A tömb indexei 0-val kezdődnek, ahol a 0 az első értéket, az (n-1) pedig az utolsó értéket jelöli.
Típus: | Int32[] |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-InputObject
A parancsmagnak a folyamaton keresztül küldendő objektumokat adja meg. Ezzel a paraméterrel objektumokat csövezhet a parancsra Select-Object
.
Amikor objektumokat ad át az InputObject paraméternek a folyamat használata helyett, Select-Object
az InputObjectet egyetlen objektumként kezeli, még akkor is, ha az érték gyűjtemény. Javasoljuk, hogy a folyamatot használja a gyűjtemények Select-Object
továbbításakor.
Típus: | PSObject |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | True |
Helyettesítő karakterek elfogadása: | False |
-Last
Megadja a bemeneti objektumok tömbjének végéből kiválasztandó objektumok számát.
Típus: | Int32 |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-Property
Megadja a kijelölendő tulajdonságokat. Ezek a tulajdonságok NoteProperty-tagokként lesznek hozzáadva a kimeneti objektumokhoz. Helyettesítő karakterek használata engedélyezett. Ha a bemeneti objektumnak nincs elnevezve a tulajdonság, az új NoteProperty értéke a következőre $null
van állítva: .
A Tulajdonság paraméter értéke lehet egy új számított tulajdonság. Számított tulajdonság létrehozásához használjon kivonattáblát.
Az érvényes kulcsok a következők:
- Név (vagy címke) –
<string>
- Kifejezés –
<string>
vagy<script block>
További információ: about_Calculated_Properties.
Típus: | Object[] |
Position: | 0 |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | True |
-Skip
Kihagyja (nem választja ki) a megadott számú elemet. Alapértelmezés szerint a Skip paraméter az objektumgyűjtemény elejétől számít. Ha a parancs az Utolsó paramétert használja, a gyűjtemény végétől számít.
A 0-nál kezdődő Index paramétertől eltérően a Skip paraméter 1-nél kezdődik.
Típus: | Int32 |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-SkipLast
Kihagyja (nem választja ki) a megadott számú elemet a lista vagy tömb végéről. Ugyanúgy működik, mint a Skip with Last paraméter használata.
A 0-nál kezdődő Index paramétertől eltérően a SkipLast paraméter 1-nél kezdődik.
Típus: | Int32 |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-Unique
Azt adja meg, hogy ha a bemeneti objektumok egy részhalmaza azonos tulajdonságokkal és értékekkel rendelkezik, akkor csak az alhalmaz egy tagját kell kijelölni.
Az egyedi értékeket más szűrési paraméterek alkalmazása után választja ki.
Ez a paraméter megkülönbözteti a kis- és nagybetűk értékét. Ennek eredményeképpen a csak karakterházként eltérő sztringek egyedinek minősülnek.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
-Wait
Azt jelzi, hogy a parancsmag kikapcsolja az optimalizálást. A PowerShell a parancsfolyamatban megjelenő sorrendben futtatja a parancsokat, és lehetővé teszi az összes objektum generálásához. Alapértelmezés szerint, ha egy Select-Object
parancsot az Első vagy az Index paraméterekkel együtt tartalmaz egy parancsfolyamatban, a PowerShell leállítja az objektumokat létrehozó parancsot, amint a kiválasztott számú objektum létrejön.
Ezt a paramétert a Windows PowerShell 3.0-ban vezettük be.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
Bevitelek
Ehhez a parancsmaghoz csövezhet objektumokat.
Kimenetek
Ez a parancsmag csak a kijelölt tulajdonságokkal rendelkező bemeneti objektumokat adja vissza.
Jegyzetek
A Windows PowerShell a következő aliasokat Select-Object
tartalmazza:
select
Az optimalizálási Select-Object
funkció csak azokhoz a parancsokhoz érhető el, amelyek feldolgozásuk során objektumokat írnak a folyamatba. Nincs hatással a feldolgozott objektumokat pufferelő és gyűjteményként megírt parancsokra. Az objektumok azonnali írása ajánlott eljárás a parancsmagok tervezésében. További információ: Önálló rekordok írása a folyamatba erősen ajánlott fejlesztési irányelvekben.