Select-Object
개체 또는 개체 속성을 선택합니다.
구문
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
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
예제 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: 이벤트 로그에서 최신 이벤트 및 가장 오래된 이벤트 선택
이 예제에서는 Windows PowerShell 이벤트 로그에서 첫 번째(최신) 및 마지막(가장 오래된) 이벤트를 가져옵니다.
Get-EventLog
는 Windows PowerShell 로그의 모든 이벤트를 가져오고 변수에 $a
저장합니다.
그런 다음 cmdlet $a
에 Select-Object
파이프됩니다. 이 Select-Object
명령은 Index 매개 변수를 사용하여 변수의 이벤트 배열에서 $a
이벤트를 선택합니다. 첫 번째 이벤트의 인덱스는 0입니다. 마지막 이벤트의 인덱스는 1을 $a
뺀 항목의 수입니다.
$a = Get-EventLog -LogName "Windows PowerShell"
$a | Select-Object -Index 0, ($A.count - 1)
예제 7: 첫 번째 개체를 제외한 모든 개체 선택
이 예제에서는 첫 번째 PSSession을 제외하고 Servers.txt 파일에 나열된 각 컴퓨터에 새 PSSession을 만듭니다.
Select-Object
는 컴퓨터 이름 목록에서 첫 번째 컴퓨터를 제외한 모든 컴퓨터를 선택합니다. 결과 컴퓨터 목록은 cmdlet의 ComputerName 매개 변수 New-PSSession
값으로 설정됩니다.
New-PSSession -ComputerName (Get-Content Servers.txt | Select-Object -Skip 1)
예제 8: 파일 이름 바꾸기 및 검토할 여러 항목 선택
다음은 읽기 전용 특성이 있는 텍스트 파일의 기본 이름에 "-ro" 접미사를 추가한 다음 사용자가 효과 샘플을 볼 수 있도록 처음 5개의 파일을 표시하는 예제입니다.
Get-ChildItem
는 ReadOnly 동적 매개 변수를 사용하여 읽기 전용 파일을 가져옵니다. 결과 파일은 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
예제 9: -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
예제 10: 개체에 사용자 지정 속성 만들기
다음 예제에서는 개체에 사용자 지정 속성을 추가하는 방법을 보여 Select-Object
줍니다.
존재하지 Select-Object
않는 속성 이름을 지정하면 전달된 각 개체에서 해당 속성을 NoteProperty로 만듭니다.
$customObject = 1 | Select-Object -Property MyCustomProperty
$customObject.MyCustomProperty = "New Custom Property"
$customObject
MyCustomProperty
----------------
New Custom Property
예제 11: 각 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
예제 12: 계산된 속성이 있는 해시 테이블의 키 선택
이 예제에서는 계산된 속성을 사용하여 해시 테이블 개체의 키-값 쌍을 표시하는 데 사용할 Select-Object
수 있는 방법을 보여 줍니다. 각 계산된 속성 해시 테이블 은 새 속성의 레이블을 키의 표시 이름으로 지정하고 해당 키의 값을 검색하는 식을 지정합니다.
@{ name = 'a' ; weight = 7 } | Select-Object -Property @(
@{ label = 'Name' ; expression = { $_.name } }
@{ label = 'Weight' ; expression = { $_.weight } }
)
Name Weight
---- ------
a 7
예제 13 - ExpandProperty가 원래 개체를 변경합니다.
이 예제에서는 ExpandProperty 매개 변수를 사용하는 부작용을 보여 줍니다. ExpandProperty를 사용하는 경우 선택한 속성을 원래 개체에 NoteProperty 멤버로 추가합니다.Select-Object
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}
볼 수 있듯이 ExpandProperty 매개 변수를 사용한 후 자식 개체에 국가 속성이 추가되었습니다.
예제 14 - 입력 개체를 변경하지 않고 확장된 속성을 사용하여 새 개체 만들기
새 개체를 만들고 입력 개체에서 속성을 복사하여 ExpandProperty 매개 변수를 사용하는 부작용을 방지할 수 있습니다.
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}
매개 변수
-ExcludeProperty
이 cmdlet이 작업에서 제외하는 속성을 지정합니다. 와일드카드가 허용됩니다. 이 매개 변수는 명령에 Property 매개 변수도 포함된 경우에만 유효합니다.
형식: | String[] |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | True |
-ExpandProperty
선택할 속성을 지정하고 해당 속성을 확장하려고 시도해야 했음을 나타냅니다. 입력 개체 파이프라인에 명명 Select-Object
된 속성이 없으면 오류가 반환됩니다.
- 지정된 속성이 배열인 경우 배열의 각 값이 출력에 포함됩니다.
- 지정된 속성이 개체인 경우 모든 InputObject에 대해 개체 속성이 확장됩니다.
두 경우 모두 출력 개체의 형식 이 확장된 속성의 Type과 일치합니다.
참고 항목
ExpandProperty를 사용하는 경우 부작용이 있습니다. Select-Object
선택한 속성을 원래 개체에 NoteProperty 멤버로 추가합니다.
Property 매개 변수를 지정 Select-Object
하면 선택한 각 속성을 출력된 모든 개체에 NoteProperty로 추가하려고 시도합니다.
Warning
해당 이름의 속성이 이미 있으므로 속성을 처리할 수 없다는 오류가 발생하는 경우 다음을 고려하세요. ExpandPropertySelect-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
있습니다.
파이프라인 Select-Object
을 사용하는 대신 InputObject 매개 변수에 개체를 전달하면 값이 컬렉션인 경우에도 InputObject를 단일 개체로 처리합니다. 컬렉션을 전달할 때 파이프라인을 Select-Object
사용하는 것이 좋습니다.
형식: | PSObject |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | True |
와일드카드 문자 허용: | False |
-Last
입력 개체 배열의 끝에서 선택할 개체 수를 지정합니다.
형식: | Int32 |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
-Property
선택할 속성을 지정합니다. 이러한 속성은 출력 개체에 NoteProperty 멤버로 추가됩니다. 와일드카드가 허용됩니다. 입력 개체에 이름이 지정된 속성이 없으면 새 NoteProperty 의 값이 .로 $null
설정됩니다.
Property 매개 변수의 값은 새 계산 속성일 수 있습니다. 계산된 속성을 만들려면 해시 테이블을 사용하세요.
유효한 키는 다음과 같습니다.
- 이름(또는 레이블) -
<string>
- 식 -
<string>
또는<script block>
자세한 내용은 about_Calculated_Properties 참조하세요.
형식: | 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
목록 또는 배열의 끝에서 지정된 수의 항목을 건너뜁니다(선택하지 않음). Last 매개 변수와 함께 Skip을 사용하는 것과 동일한 방식으로 작동합니다.
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은 명령 파이프라인에 표시되는 순서대로 명령을 실행하고 모든 개체를 생성할 수 있도록 합니다. 기본적으로 명령 파이프라인에 First 또는 Index 매개 변수가 있는 명령을 포함하는 Select-Object
경우 PowerShell은 선택한 수의 개체가 생성되는 즉시 개체를 생성하는 명령을 중지합니다.
이 매개 변수는 Windows PowerShell 3.0에서 도입되었습니다.
형식: | SwitchParameter |
Position: | Named |
Default value: | None |
필수: | False |
파이프라인 입력 허용: | False |
와일드카드 문자 허용: | False |
입력
개체를 이 cmdlet으로 파이프할 수 있습니다.
출력
이 cmdlet은 선택한 속성만 있는 입력 개체를 반환합니다.
참고
Windows PowerShell에는 다음 별칭이 포함됩니다.Select-Object
select
최적화 기능은 Select-Object
처리될 때 파이프라인에 개체를 쓰는 명령에만 사용할 수 있습니다. 처리된 개체를 버퍼링하고 컬렉션으로 작성하는 명령에는 영향을 주지 않습니다. 개체를 즉시 작성하는 것이 cmdlet 디자인 모범 사례입니다. 자세한 내용은 강력한 권장 개발 지침의 파이프라인에 단일 레코드 쓰기를 참조하세요.
관련 링크
PowerShell