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
매개 변수를 사용하여 프로세스 이름을 선택합니다. 이렇게 하면 모든
이 명령은 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-Object
ScriptBlock 문자열을 속성 이름으로 사용합니다.
해시 테이블사용하여 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-Object
InputObject 단일 개체로 처리합니다.
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 |
입력
모든 개체를 Select-Object
파이프할 수 있습니다.
출력
참고
- 기본 제공 별칭인
Select-Object
select
cmdlet을 참조할 수도 있습니다. 자세한 내용은 about_Aliases참조하세요. -
Select-Object
최적화 기능은 처리될 때 파이프라인에 개체를 쓰는 명령에만 사용할 수 있습니다. 처리된 개체를 버퍼링하고 컬렉션으로 작성하는 명령에는 영향을 주지 않습니다. 개체를 즉시 작성하는 것이 cmdlet 디자인 모범 사례입니다. 자세한 내용은 MSDN 라이브러리의 강력한 권장 개발 지침 파이프라인에 단일 레코드 쓰기를 참조하세요.