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 kijelöli egy objektum vagy objektumkészlet megadott tulajdonságait. 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ő, Utolsó, Egyedi, Kihagyásés Index paramétereket. Az objektumtulajdonságok kiválasztásához használja a Tulajdonság paramétert. A tulajdonságok kiválasztásakor Select-Object olyan új objektumokat ad vissza, amelyek csak a megadott tulajdonságokkal rendelkeznek.

A Windows PowerShell 3.0-tól kezdve Select-Object tartalmaz egy optimalizálási funkciót, amely megakadályozza, hogy a parancsok ne hozzanak létre és dolgozzanak fel nem használt objektumokat.

Ha Select-Object használ a Első vagy Index paraméterekkel egy parancsfolyamatban, a PowerShell leállítja az objektumokat létrehozó parancsot, amint eléri a kiválasztott számú objektumot. Az optimalizálási viselkedés kikapcsolásához használja a Várakozás 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 Név, azonosítóés munkakészlet (WS) tulajdonságaival 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. Get-Process parancsmagot használ a folyamat számítógépen való lekéréséhez.

A Select-Object parancsmaggal [System.Diagnostics.ProcessModule] példányok tömbje jelenik meg az egyes System.Diagnostics.Process példányok Get-Processáltal Modulok tulajdonságában található módon.

A Select-Object parancsmag Tulajdonság paramétere kiválasztja a folyamatneveket. Ez hozzáad egy ProcessNameNoteProperty minden [System.Diagnostics.ProcessModule] példányhoz, és feltölti az aktuális folyamat ProcessName tulajdonságának értékével.

Végül 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 Wait paraméter nem szükséges az Sort-Object parancsmagot tartalmazó parancsokban, mert Sort-Object feldolgozza az összes objektumot, majd visszaad egy gyűjteményt. A Select-Object optimalizálása csak olyan parancsokhoz é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 a Select-ObjectEgyedi paraméterét 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 a Első paramétert használja a tömb első számú elemének kiválasztásához, Az egyedi 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 Első a tömb első 2 elemeként "a","a" választja ki. Egyedi"a","a" alkalmazva, és egyedi értékként a ad vissza.

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. Ezután a $a a Select-Object parancsmagra lesz állítva. A Select-Object parancs az Index paraméter használatával választja ki az eseményeket a $a változó eseménytömbéből. Az első esemény indexe 0. Az utolsó esemény indexe az elemek száma $a mínusz 1.

$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 összes számítógépen, 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 New-PSSession parancsmag ComputerName paraméterének é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 parancsmagra kerülnek, amely átnevezi a fájlt. A Rename-ItemPassThru paraméterével küldi el az átnevezett fájlokat a Select-Object parancsmagba, amely az első 5-öt választja ki a megjelenítéshez.

A Select-ObjectWait paramétere megakadályozza, 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 a ExpandProperty paraméter bonyolultságát mutatja be.

Vegye figyelembe, hogy a létrehozott kimenet [System.Int32] példányok tömbje volt. A példányok megfelelnek a Kimeneti nézetszabvá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 Select-Object használatával adhat hozzá egyéni tulajdonságot bármely objektumhoz. Ha olyan tulajdonságnevet ad meg, amely nem létezik, Select-Object ezt a tulajdonságot NoteProperty hozza létre minden átadott objektumon.

$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 Select-Object használatával számított tulajdonságokat adhat hozzá a bemenethez. Ha átad egy ScriptBlock a Tulajdonság paraméternek, Select-Object kiértékeli az egyes átadott objektumok kifejezését, és hozzáadja az eredményeket a kimenethez. A ScriptBlockbelül a $_ változóval hivatkozhat a folyamat aktuális objektumára.

Alapértelmezés szerint a Select-Object a ScriptBlock sztringet használja a tulajdonság neveként. A Kivonatolóhasználatával a ScriptBlock kimenetét minden objektumhoz hozzáadott egyéni tulajdonságként címkézheti. A Select-Objectátadott objektumokhoz több számított tulajdonságot 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 meg a Select-Object egy kivonatoló objektum kulcs-érték párjait számított tulajdonságokkal. Minden számított tulajdonság kivonatoló 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 a ExpandProperty paraméter használatának mellékhatását mutatja be. Ha ExpandPropertyhasznál, Select-Object hozzáadja a kijelölt tulajdonságokat az eredeti objektumhoz NoteProperty tagokként.

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}

Amint látható, a country tulajdonság a gyermek objektumhoz lett hozzáadva a ExpandProperty paraméter használata után.

14. példa – Új objektum létrehozása kibontott tulajdonságokkal a bemeneti objektum módosítása nélkül

A 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

A kimeneti objektumok Típus mindkét esetben megegyezik a kibontott tulajdonság Típus.

Jegyzet

A ExpandPropertyhasználatakor mellékhatás lép fel. A Select-Object hozzáadja a kijelölt tulajdonságokat az eredeti objektumhoz NoteProperty tagokként.

Ha a Tulajdonság paraméter meg van adva, Select-Object minden kijelölt tulajdonságot NoteProperty próbál 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 ExpandPropertyhasználatakor a Select-Object nem tudja lecserélni a meglévő tulajdonságot. Ez a következőt jelenti:

  • Ha a kibontott objektumnak azonos nevű tulajdonsága van, a parancs hibát ad vissza.
  • Ha a Kijelölt objektumnak ugyanaz a tulajdonsága, mint egy Kibontott objektum tulajdonságának, 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. Ez a paraméter lehetővé teszi objektumok Select-Object.

Amikor objektumokat ad át az InputObject paraméternek a folyamat használata helyett, Select-Object a InputObject egyetlen objektumként kezeli, még akkor is, ha az érték gyűjtemény. A gyűjtemények Select-Objectvaló átadásakor ajánlott a folyamatot használni.

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 $null.

A tulajdonság paraméter értéke új számított tulajdonság lehet. 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 Kihagyja a paraméterszámot az objektumgyűjtemény elejétől. Ha a parancs a Last paramétert használja, a gyűjtemény végétől számít.

A Index paramétertől eltérően, amely 0-nál kezdődik, 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 és Last paraméter használata.

A Index paramétertől eltérően, amely 0-nál kezdődik, 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.

Egyedi más szűrési paraméterek alkalmazása után értékeket választ 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 Select-Object parancsot ad hozzá az Első vagy Index paraméterekkel 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 Select-Objectkövetkező aliasait tartalmazza:

  • select

A Select-Object optimalizálási funkciója 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 folyamaterősen ajánlott fejlesztési irányelvek.