다음을 통해 공유


Select-Object

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

구문

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

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

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

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

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

예제

예제 1: 속성별 개체 선택

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

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

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

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

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

이 명령은 cmdlet의 Select-Object 매개 변수를 사용하여 프로세스 이름을 선택합니다. 이렇게 하면 모든 인스턴스에 추가하고 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개의 프로세스를 가져옵니다. Get-Process cmdlet은 컴퓨터의 프로세스를 가져옵니다. Sort-Object cmdlet은 메모리(작업 집합) 사용량에 따라 프로세스를 정렬하고, Select-Object cmdlet은 결과 개체 배열의 마지막 5개 멤버만 선택합니다.

모든 개체를 처리한 다음 컬렉션을 반환하기 때문에 Sort-Object cmdlet을 포함하는 명령에는 Sort-Object 매개 변수가 필요하지 않습니다. 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: 배열에서 고유 문자 선택

이 명령은 Select-Object 매개 변수를 사용하여 문자 배열에서 고유 문자를 가져옵니다.

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

a
b
c

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

이러한 명령은 Windows PowerShell 이벤트 로그에서 첫 번째(최신) 및 마지막(가장 오래된) 이벤트를 가져옵니다.

이 명령은 Get-EventLog cmdlet을 사용하여 Windows PowerShell 로그의 모든 이벤트를 가져옵니다. $a 변수에 저장합니다.

두 번째 명령은 파이프라인 연산자(|)를 사용하여 $a 이벤트를 Select-Object cmdlet으로 보냅니다. Select-Object 명령은 Index 매개 변수를 사용하여 $a 변수의 이벤트 배열에서 이벤트를 선택합니다. 첫 번째 이벤트의 인덱스는 0입니다. 마지막 이벤트의 인덱스는 $a 항목 수에서 1을 뺀 값입니다.

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

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

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

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

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

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

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

이 명령은 FileSystem cmdlet용 Get-ChildItem 동적 매개 변수를 사용하여 읽기 전용 파일을 가져옵니다. 파이프라인 연산자(|)를 사용하여 파일 이름을 바꾸는 Rename-Item cmdlet으로 파일을 보냅니다. Rename-Item 매개 변수를 사용하여 이름이 바뀐 파일을 Select-Object cmdlet으로 보냅니다. 이 매개 변수는 처음 5를 표시합니다.

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

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

예제 8: -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), 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

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

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

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

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

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

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

기본적으로 Select-ObjectScriptBlock 문자열을 속성 이름으로 사용합니다. 해시 테이블사용하여 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

매개 변수

-ExcludeProperty

이 cmdlet이 작업에서 제외하는 속성을 지정합니다. 와일드카드가 허용됩니다. 이 매개 변수는 명령에 Property 매개 변수도 포함되어 있는 경우에만 유효합니다.

형식:String[]
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:True

-ExpandProperty

선택할 속성을 지정하고 해당 속성을 확장하려고 시도해야 했음을 나타냅니다.

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

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

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

경고

오류가 표시되는 경우 : 속성 <PropertyName> 이미 있으므로 속성을 처리할 수 없습니다. 다음을 고려하세요. -ExpandProperty사용하는 경우 Select-Object 기존 속성을 바꿀 수 없습니다. 즉, 다음을 의미합니다.

  • 확장된 개체에 같은 이름의 속성이 있으면 오류가 발생합니다.
  • Selected 개체에 Expanded 개체 속성과 같은 이름의 속성이 있으면 오류가 발생합니다.
형식:String
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-First

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

형식:Int32
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Index

인덱스 값에 따라 배열에서 개체를 선택합니다. 쉼표로 구분된 목록에 인덱스를 입력합니다.

배열의 인덱스는 0으로 시작하고, 여기서 0은 첫 번째 값을 나타내고(n-1)는 마지막 값을 나타냅니다.

형식:Int32[]
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-InputObject

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

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

형식:PSObject
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:True
와일드카드 문자 허용:False

-Last

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

형식:Int32
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Property

선택할 속성을 지정합니다. 이러한 속성은 NoteProperty 멤버로 출력 개체에 추가됩니다. 와일드카드가 허용됩니다.

Property 매개 변수의 값은 새 계산 속성일 수 있습니다. 계산된 속성을 만들려면 해시 테이블을 사용합니다. 유효한 키는 다음과 같습니다.

  • 이름(또는 레이블): <string>
  • <string> 또는 <script block>
형식:Object[]
Position:0
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:True

-Skip

지정한 항목 수를 건너뛰고 선택하지 않습니다. 기본적으로 Skip 매개 변수는 배열 또는 개체 목록의 시작 부분에서 계산되지만 명령이 Last 매개 변수를 사용하는 경우 목록 또는 배열의 끝에서 계산됩니다.

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

형식:Int32
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-SkipLast

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

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

형식:Int32
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Unique

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

이 매개 변수는 대/소문자를 구분합니다. 따라서 문자 대/소문자만 다른 문자열은 고유한 것으로 간주됩니다.

형식:SwitchParameter
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

-Wait

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

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

형식:SwitchParameter
Position:Named
Default value:None
필수:False
파이프라인 입력 허용:False
와일드카드 문자 허용:False

입력

PSObject

모든 개체를 Select-Object파이프할 수 있습니다.

출력

PSObject

참고

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