Megosztás a következőn keresztül:


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-ProcessModulok 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-Objectobjektumokhoz 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-Objecthaszná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-Objecttová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 $nullvan á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

PSObject

Ehhez a parancsmaghoz csövezhet objektumokat.

Kimenetek

PSObject

Ez a parancsmag csak a kijelölt tulajdonságokkal rendelkező bemeneti objektumokat adja vissza.

Jegyzetek

A Windows PowerShell a következő aliasokat Select-Objecttartalmazza:

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