Select-Object

개체 또는 개체 속성을 선택합니다.

Syntax

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

cmdlet은 Select-Object 개체 또는 개체 집합의 지정된 속성을 선택합니다. 또한 고유한 개체, 지정된 수의 개체 또는 배열에서 지정된 위치에 있는 개체를 선택할 수 있습니다.

컬렉션에서 개체를 선택하려면 첫 번째, 마지막, 고유, 건너뛰기인덱스 매개 변수를 사용합니다. 개체 속성을 선택하려면 Property 매개 변수를 사용합니다. 속성을 선택하면 지정된 속성 Select-Object 만 있는 새 개체를 반환합니다.

Windows PowerShell 3.0 Select-Object 부터는 명령이 사용되지 않는 개체를 만들고 처리하는 것을 방지하는 최적화 기능이 포함되어 있습니다.

명령 파이프라인에서 First 또는 Index 매개 변수와 함께 사용하는 Select-Object 경우 PowerShell은 선택한 개체 수에 도달하는 즉시 개체를 생성하는 명령을 중지합니다. 이 최적화 동작을 해제하려면 Wait 매개 변수를 사용합니다.

예제

예제 1: 속성별 개체 선택

이 예제에서는 프로세스 개체의 이름, ID 및 WS(작업 집합) 속성이 있는 개체를 만듭니다.

Get-Process | Select-Object -Property ProcessName, Id, WS

예제 2: 속성별로 개체를 선택하고 결과 서식 지정

이 예제에서는 컴퓨터의 프로세스에서 사용하는 모듈에 대한 정보를 가져옵니다. cmdlet을 사용하여 Get-Process 컴퓨터에서 프로세스를 가져옵니다.

cmdlet을 사용하여 각 System.Diagnostics.Process 인스턴스 출력의 [System.Diagnostics.ProcessModule] Modules 속성에 포함된 인스턴스 배열을 출력합니다Get-Process.Select-Object

cmdlet의 Select-Object Property 매개 변수는 프로세스 이름을 선택합니다. 그러면 모든 [System.Diagnostics.ProcessModule] 인스턴스에ProcessName NoteProperty가 추가되고 현재 프로세스의 ProcessName 속성 값으로 채워집니다.

마지막으로, Format-List cmdlet은 목록에서 각 프로세스의 이름과 모듈을 표시하는 데 사용됩니다.

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: 가장 많은 메모리를 사용하여 프로세스 선택

이 예제에서는 가장 많은 메모리를 사용하는 5개의 프로세스를 가져옵니다. cmdlet은 Get-Process 컴퓨터의 프로세스를 가져옵니다. cmdlet은 Sort-Object 메모리(작업 집합) 사용량에 따라 프로세스를 정렬하고 Select-Object , cmdlet은 결과 개체 배열의 마지막 5개 멤버만 선택합니다.

모든 개체를 처리한 다음 컬렉션을 반환하기 때문에 Sort-Object cmdlet을 포함하는 Sort-Object 명령에는 Wait 매개 변수가 필요하지 않습니다. 최적화는 Select-Object 개체가 처리될 때 개별적으로 반환하는 명령에만 사용할 수 있습니다.

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: 배열에서 고유 문자 선택

이 예제에서는 Unique 매개 변수 Select-Object사용하여 문자 배열에서 고유 문자를 가져옵니다.

"a","b","c","a","A","a" | Select-Object -Unique

a
b
c
A

예제 5: 다른 매개 변수와 함께 '-Unique' 사용

Unique 매개 변수는 다른 Select-Object 매개 변수가 적용된 후 값을 필터링합니다. 예를 들어 First 매개 변수를 사용하여 배열의 첫 번째 항목 수를 선택하는 경우 Unique는 전체 배열이 아닌 선택한 값에만 적용됩니다.

"a","a","b","c" | Select-Object -First 2 -Unique

a

이 예제 에서는 먼저 배열에서 처음 2개 항목으로 선택합니다 "a","a" . Unique 가 적용되고 "a","a" 고유 값으로 반환 a 됩니다.

예제 6: '-CaseInsensitive' 매개 변수를 사용하여 고유 문자열 선택

이 예제에서는 대/소문자를 구분하지 않는 비교를 사용하여 문자열 배열에서 고유 문자열을 가져옵니다.

"aa", "Aa", "Bb", "bb" | Select-Object -Unique -CaseInsensitive

aa
Bb

예제 7: 이벤트 로그에서 최신 이벤트 및 가장 오래된 이벤트 선택

이 예제에서는 Windows PowerShell 이벤트 로그에서 첫 번째(최신) 및 마지막(가장 오래된) 이벤트를 가져옵니다.

Get-WinEvent 는 Windows PowerShell 로그의 모든 이벤트를 가져오고 변수에 $a 저장합니다. 그런 다음 cmdlet $aSelect-Object 파이프됩니다. 이 Select-Object 명령은 Index 매개 변수를 사용하여 변수의 이벤트 배열에서 $a 이벤트를 선택합니다. 첫 번째 이벤트의 인덱스는 0입니다. 마지막 이벤트의 인덱스는 1을 $a 뺀 항목의 수입니다.

$a = Get-WinEvent -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($a.count - 1)

예제 8: 첫 번째 개체를 제외한 모든 개체 선택

이 예제에서는 첫 번째 PSSession을 제외하고 Servers.txt 파일에 나열된 각 컴퓨터에 새 PSSession을 만듭니다.

Select-Object 는 컴퓨터 이름 목록에서 첫 번째 컴퓨터를 제외한 모든 컴퓨터를 선택합니다. 결과 컴퓨터 목록은 cmdlet의 ComputerName 매개 변수 New-PSSession 값으로 설정됩니다.

New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)

예제 9: 파일 이름 바꾸기 및 검토할 여러 항목 선택

다음은 읽기 전용 특성이 있는 텍스트 파일의 기본 이름에 "-ro" 접미사를 추가한 다음 사용자가 효과 샘플을 볼 수 있도록 처음 5개의 파일을 표시하는 예제입니다.

Get-ChildItemReadOnly 동적 매개 변수를 사용하여 읽기 전용 파일을 가져옵니다. 결과 파일은 cmdlet에 Rename-Item 파이프되어 파일 이름을 바꿉니다. 이 매개 변수는 이름이 바뀐 파일을 cmdlet으로 보내는 PassThru 매개 변수를 Select-Object 사용하며, 이 매개 변수 Rename-Item 는 처음 5를 표시하도록 선택합니다.

의 Wait 매개 변수 Select-Object처음 5개의 읽기 전용 텍스트 파일을 받은 후 PowerShell이 cmdlet을 중지 Get-ChildItem 하지 못하도록 합니다. 이 매개 변수가 없으면 처음 5개의 읽기 전용 파일만 이름이 바뀝니다.

Get-ChildItem *.txt -ReadOnly |
    Rename-Item -NewName {$_.BaseName + "-ro.txt"} -PassThru |
    Select-Object -First 5 -Wait

예제 10: -ExpandProperty 매개 변수의 복잡성 표시

이 예제에서는 ExpandProperty 매개 변수의 복잡성을 보여줍니다.

생성된 출력은 인스턴스 배열 [System.Int32] 이었습니다. 인스턴스는 출력 뷰표준 서식 규칙을 준수합니다. 모든 확장된 속성에 대해 마찬가지입니다. 출력된 개체에 특정 표준 형식이 있는 경우 확장된 속성이 표시되지 않을 수 있습니다.

# 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

예제 11: 개체에 사용자 지정 속성 만들기

다음 예제에서는 개체에 사용자 지정 속성을 추가하는 방법을 보여 Select-Object 줍니다. 존재하지 Select-Object 않는 속성 이름을 지정하면 전달된 각 개체에서 해당 속성을 NoteProperty만듭니다.

$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject

MyCustomProperty
----------------
New Custom Property

예제 12: 각 InputObject에 대한 계산 속성 만들기

이 예제에서는 계산된 속성을 입력에 추가하는 방법을 Select-Object 보여 줍니다. ScriptBlock속성 매개 변수에 전달하면 Select-Object 전달된 각 개체의 식을 평가하고 결과를 출력에 추가합니다. ScriptBlock 내에서 변수를 $_ 사용하여 파이프라인의 현재 개체를 참조할 수 있습니다.

기본적으로 Select-Object ScriptBlock 문자열을 속성 이름으로 사용합니다. Hashtable사용하여 ScriptBlock출력을 각 개체에 추가된 사용자 지정 속성으로 레이블을 지정할 수 있습니다. 에 전달된 Select-Object각 개체에 여러 계산 속성을 추가할 수 있습니다.

# 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

예제 13: 계산된 속성을 사용하지 않고 해시 테이블 키 선택

PowerShell 6 Select-Object 부터 해시 테이블 입력의 키를 속성으로 선택할 수 있습니다 . 다음 예제에서는 입력 해시 테이블의 weight 키와 name 키를 선택하고 출력을 표시합니다.

@{ name = 'a' ; weight = 7 } | Select-Object -Property name, weight

name weight
---- ------
a         7

매개 변수

-CaseInsensitive

기본적으로 Unique 매개 변수를 사용하는 경우 cmdlet은 대/소문자를 구분하는 비교를 사용합니다. 이 매개 변수를 사용하는 경우 cmdlet은 대/소문자를 구분하지 않는 비교를 사용합니다.

이 매개 변수는 PowerShell 7.4에 추가되었습니다.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-ExcludeProperty

이 cmdlet이 작업에서 제외하는 속성을 지정합니다. 야생카드 허용됩니다.

PowerShell 6부터는 ExcludeProperty가 작동할 속성 매개 변수를 더 이상 포함할 필요가 없습니다.

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-ExpandProperty

선택할 속성을 지정하고 해당 속성을 확장하려고 시도해야 했음을 나타냅니다. 입력 개체 파이프라인에 명명 Select-Object 된 속성이 없으면 오류가 반환됩니다.

  • 지정된 속성이 배열인 경우 배열의 각 값이 출력에 포함됩니다.
  • 지정된 속성이 개체인 경우 모든 InputObject에 대해 개체 속성이 확장됩니다.

두 경우 모두 출력 개체의 형식 이 확장된 속성의 Type과 일치합니다.

Property 매개 변수를 지정 Select-Object 하면 선택한 각 속성을 출력된 모든 개체에 NoteProperty추가하려고 시도합니다.

Warning

해당 이름의 속성이 이미 있으므로 속성을 처리할 수 없다는 오류가 발생하는 경우 다음을 고려하세요. ExpandPropertySelect-Object를 사용하는 경우 기존 속성을 바꿀 수 없습니다. 이것은 다음을 의미합니다.

  • 확장된 개체에 같은 이름의 속성이 있는 경우 명령은 오류를 반환합니다.
  • Selected 개체에 Expanded 개체의 속성과 이름이 같은 속성이 있으면 명령에서 오류를 반환합니다.
Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-First

입력 개체 배열의 시작 부분에서 선택할 개체 수를 지정합니다.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Index

인덱스 값을 기준으로 배열에서 개체를 선택합니다. 쉼표로 구분된 목록에 인덱스를 입력합니다. 배열의 인덱스는 0으로 시작하고, 여기서 0은 첫 번째 값을 나타내고(n-1)는 마지막 값을 나타냅니다.

Type:Int32[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

파이프라인을 통해 cmdlet에 보낼 개체를 지정합니다. 이 매개 변수를 사용하면 개체를 .에 파이프할 수 Select-Object있습니다.

파이프라인 Select-Object 을 사용하는 대신 InputObject 매개 변수에 개체를 전달하면 값이 컬렉션인 경우에도 InputObject를 단일 개체로 처리합니다. 컬렉션을 전달할 때 파이프라인을 Select-Object사용하는 것이 좋습니다.

Type:PSObject
Position:Named
Default value:None
Required:False
Accept pipeline input:True
Accept wildcard characters:False

-Last

입력 개체 배열의 끝에서 선택할 개체 수를 지정합니다.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Property

선택할 속성을 지정합니다. 이러한 속성은 출력 개체에 NoteProperty 멤버로 추가됩니다. 야생카드 허용됩니다. 입력 개체에 이름이 지정된 속성이 없으면 새 NoteProperty 의 값이 .로 $null설정됩니다.

Property 매개 변수의 값은 새 계산 속성일 수 있습니다. 계산된 속성을 만들려면 해시 테이블을 사용하세요.

유효한 키는 다음과 같습니다.

  • 이름(또는 레이블) - <string>
  • 식 - <string> 또는 <script block>

자세한 내용은 about_Calculated_Properties 참조하세요.

Type:Object[]
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Skip

지정된 항목 수를 건너뜁니다(선택하지 않음). 기본적으로 Skip 매개 변수는 개체 컬렉션의 시작 부분에서 계산됩니다. 명령이 Last 매개 변수를 사용하는 경우 컬렉션의 끝에서 계산됩니다.

0에서 계산을 시작하는 Index 매개 변수와 달리 Skip 매개 변수는 1에서 시작합니다.

PowerShell 7.4부터 SkipLast 매개 변수와 Skip 매개 변수를 사용하여 컬렉션의 시작과 끝에서 항목을 건너뛸 수 있습니다.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SkipIndex

인덱스 값에 따라 배열에서 개체를 건너뛰고 선택하지 않습니다. 쉼표로 구분된 목록에 인덱스를 입력합니다. 배열의 인덱스는 0으로 시작하고, 여기서 0은 첫 번째 값을 나타내고(n-1)는 마지막 값을 나타냅니다.

이 매개 변수는 Windows PowerShell 6.0에서 도입되었습니다.

Type:Int32[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SkipLast

목록 또는 배열의 끝에서 지정된 수의 항목을 건너뜁니다(선택하지 않음). Last 매개 변수와 함께 Skip을 사용하는 것과 동일한 방식으로 작동합니다.

0에서 계산을 시작하는 Index 매개 변수와 달리 SkipLast 매개 변수는 1에서 시작합니다.

PowerShell 7.4부터 SkipLast 매개 변수와 Skip 매개 변수를 사용하여 컬렉션의 시작과 끝에서 항목을 건너뛸 수 있습니다.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Unique

입력 개체의 하위 집합에 동일한 속성과 값이 있는 경우 하위 집합의 단일 멤버만 선택되도록 지정합니다.

고유는 다른 필터링 매개 변수가 적용된 후 값을 선택합니다.

이 매개 변수는 대/소문자를 구분합니다. 따라서 문자 대/소문자만 다른 문자열은 고유한 것으로 간주됩니다. CaseInsensitive 매개 변수를 추가하여 대/소문자를 구분하지 않는 비교를 수행합니다.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Wait

cmdlet이 최적화를 해제했음을 나타냅니다. PowerShell은 명령 파이프라인에 표시되는 순서대로 명령을 실행하고 모든 개체를 생성할 수 있도록 합니다. 기본적으로 명령 파이프라인에 First 또는 Index 매개 변수가 있는 명령을 포함하는 Select-Object 경우 PowerShell은 선택한 수의 개체가 생성되는 즉시 개체를 생성하는 명령을 중지합니다.

이 매개 변수는 Windows PowerShell 3.0에서 도입되었습니다.

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

입력

PSObject

개체를 이 cmdlet으로 파이프할 수 있습니다.

출력

PSObject

이 cmdlet은 선택한 속성만 있는 입력 개체를 반환합니다.

참고

PowerShell에는 다음 별칭이 포함됩니다.Select-Object

  • 모든 플랫폼:
    • select

최적화 기능은 Select-Object 처리될 때 파이프라인에 개체를 쓰는 명령에만 사용할 수 있습니다. 처리된 개체를 버퍼링하고 컬렉션으로 작성하는 명령에는 영향을 주지 않습니다. 개체를 즉시 작성하는 것이 cmdlet 디자인 모범 사례입니다. 자세한 내용은 강력한 권장 개발 지침의 파이프라인단일 레코드 쓰기를 참조하세요.