about_Calculated_Properties
간단한 설명
PowerShell은 새 속성을 동적으로 추가하고 파이프라인에 개체 출력의 서식을 변경하는 기능을 제공합니다.
자세한 설명
여러 PowerShell cmdlet은 해당 출력 개체에 새 속성을 추가할 수 있는 매개 변수를 사용하여 입력 개체를 출력 개체로 변환, 그룹화 또는 처리합니다. 이러한 매개 변수를 사용하여 입력 개체의 값을 기반으로 출력 개체에 대해 계산된 새 속성을 생성할 수 있습니다. 계산된 속성은 새 속성의 이름, 값을 계산할 식 및 선택적 서식 정보를 지정하는 키-값 쌍을 포함하는 해시 테이블에 의해 정의됩니다.
지원되는 cmdlet
다음 cmdlet은 Property 매개 변수에 대해 계산된 속성 값을 지원합니다. cmdlet은 Format-*
GroupBy 매개 변수에 대한 계산 값도 지원합니다.
다음 목록에서는 계산 속성을 지원하는 cmdlet과 각 cmdlet이 지원하는 키-값 쌍을 항목별로 나열합니다.
Compare-Object
expression
ConvertTo-Html
name
/label
- 선택 사항(PowerShell 6.x에 추가됨)expression
width
-선택적alignment
-선택적
Format-Custom
expression
depth
-선택적
Format-List
name
/label
-선택적expression
formatstring
-선택적
이 동일한 키-값 쌍 집합은 모든
Format-*
cmdlet에 대해 GroupBy 매개 변수에 전달된 계산된 속성 값에도 적용됩니다.Format-Table
name
/label
-선택적expression
formatstring
-선택적width
-선택적alignment
-선택적
Format-Wide
expression
formatstring
-선택적
Group-Object
expression
Measure-Object
- 해시 테이블이 아닌 식에 대한 스크립트 블록만 지원합니다.
- PowerShell 5.1 이상에서는 지원되지 않습니다.
Select-Object
name
/label
-선택적expression
Sort-Object
expression
ascending
/descending
-선택적
참고 항목
expression
값은 해시 테이블 대신 스크립트 블록일 수 있습니다. 자세한 내용은 참고 섹션을 참조하세요.
해시 테이블 키 정의
name
/label
- 생성되는 속성의 이름을 지정합니다. 사용하거나 해당 별칭을label
서로 교환할 수name
있습니다.expression
- 새 속성의 값을 계산하는 데 사용되는 문자열 또는 스크립트 블록입니다. 문자열인expression
경우 값은 입력 개체의 속성 이름으로 해석됩니다. 이 옵션은 .보다expression = { $_.<PropertyName> }
짧은 옵션입니다.alignment
- 테이블 형식 출력을 생성하는 cmdlet에서 값이 열에 표시되는 방식을 정의하는 데 사용됩니다. 값은'left'
,'center'
또는'right'
여야 합니다.formatstring
- 값이 출력에 대해 형식이 지정되는 방법을 정의하는 형식 문자열을 지정합니다. 형식 문자열에 대한 자세한 내용은 .NET의 형식 형식을 참조하세요.width
- 값이 표시될 때 표의 최대 너비 열을 지정합니다. 값은 .보다0
커야 합니다.depth
- 깊이 매개 변수는Format-Custom
모든 속성에 대한 확장 깊이를 지정합니다. 키를depth
사용하면 속성당 확장 깊이를 지정할 수 있습니다.ascending
/descending
- 하나 이상의 속성에 대한 정렬 순서를 지정할 수 있습니다. 부울 값입니다.
지정된 이름 접두사를 명확하게 지정하지 않는 한 해시 테이블 키의 철자를 지정할 필요가 없습니다. 예를 들어 대신 사용할 수 있습니다 n
Name
e
Expression
.
예제
Compare-Object
계산된 속성을 사용하면 입력 개체의 속성을 비교하는 방법을 제어할 수 있습니다. 이 예제에서는 값을 직접 비교하는 대신 산술 연산의 결과(2의 모듈러스)와 값이 비교됩니다.
Compare-Object @{p=1} @{p=2} -property @{ Expression = { $_.p % 2 } }
$_.p % 2 SideIndicator
---------- -------------
0 =>
1 <=
ConvertTo-Html
ConvertTo-Html
개체 컬렉션을 HTML 테이블로 변환할 수 있습니다.
계산된 속성을 사용하면 테이블이 표시되는 방식을 제어할 수 있습니다.
Get-Alias |
ConvertTo-Html Name,
Definition,
@{
name='ParameterCount'
expr={$_.Parameters.Keys.Count}
align='center'
} |
Out-File .\aliases.htm -Force
다음은 PowerShell 별칭 목록과 별칭이 지정된 각 명령에 대한 숫자 매개 변수가 포함된 HTML 테이블을 만드는 예제입니다. ParameterCount 열의 값이 가운데에 배치됩니다.
Format-Custom
Format-Custom
는 클래스 정의와 유사한 형식으로 개체의 사용자 지정 보기를 제공합니다. 더 복잡한 개체는 복합 형식으로 깊이 중첩된 멤버를 포함할 수 있습니다. Depth 매개 변수 Format-Custom
는 모든 속성에 대한 확장 깊이를 지정합니다. 키를 depth
사용하면 속성당 확장 깊이를 지정할 수 있습니다.
이 예제에서 키는 depth
cmdlet에 대한 사용자 지정 출력을 Get-Date
간소화합니다. Get-Date
는 DateTime 개체를 반환합니다. 이 개체의 Date 속성도 DateTime 개체이므로 개체가 중첩됩니다.
Get-Date | Format-Custom @{expr={$_.Date};depth=1},TimeOfDay
class DateTime
{
$_.Date =
class DateTime
{
Date = 8/7/2020 12:00:00 AM
Day = 7
DayOfWeek = Friday
DayOfYear = 220
Hour = 0
Kind = Local
Millisecond = 0
Minute = 0
Month = 8
Second = 0
Ticks = 637323552000000000
TimeOfDay = 00:00:00
Year = 2020
DateTime = Friday, August 07, 2020 12:00:00 AM
}
TimeOfDay =
class TimeSpan
{
Ticks = 435031592302
Days = 0
Hours = 12
Milliseconds = 159
Minutes = 5
Seconds = 3
TotalDays = 0.503508787386574
TotalHours = 12.0842108972778
TotalMilliseconds = 43503159.2302
TotalMinutes = 725.052653836667
TotalSeconds = 43503.1592302
}
}
Format-List
이 예제에서는 계산 속성을 사용하여 출력 Get-ChildItem
의 이름과 형식을 변경합니다.
Get-ChildItem *.json -File |
Format-List Fullname,
@{
name='Modified'
expression={$_.LastWriteTime}
formatstring='O'
},
@{
name='Size'
expression={$_.Length/1KB}
formatstring='N2'
}
FullName : C:\Git\PS-Docs\PowerShell-Docs\.markdownlint.json
Modified : 2020-07-23T10:26:28.4092457-07:00
Size : 2.40
FullName : C:\Git\PS-Docs\PowerShell-Docs\.openpublishing.publish.config.json
Modified : 2020-07-23T10:26:28.4092457-07:00
Size : 2.25
FullName : C:\Git\PS-Docs\PowerShell-Docs\.openpublishing.redirection.json
Modified : 2020-07-27T13:05:24.3887629-07:00
Size : 324.60
Format-Table
이 예제에서 계산된 속성은 콘텐츠 형식별로 파일을 분류하는 데 사용되는 Type 속성을 추가합니다.
Get-ChildItem -File |
Sort-Object extension |
Format-Table Name, Length -GroupBy @{
name='Type'
expression={
switch ($_.extension) {
'.md' {'Content'}
'' {'Metacontent'}
'.ps1' {'Automation'}
'.yml' {'Automation'}
default {'Configuration'}
}
}
}
Type: Metacontent
Name Length
---- ------
ThirdPartyNotices 1229
LICENSE-CODE 1106
LICENSE 19047
Type: Configuration
Name Length
---- ------
.editorconfig 183
.gitattributes 419
.gitignore 228
.markdownlint.json 2456
.openpublishing.publish.config.json 2306
.openpublishing.redirection.json 332394
.localization-config 232
Type: Content
Name Length
---- ------
README.md 3355
CONTRIBUTING.md 247
Type: Automation
Name Length
---- ------
.openpublishing.build.ps1 796
build.ps1 7495
ci.yml 645
ci-steps.yml 2035
daily.yml 1271
Format-Wide
cmdlet Format-Wide
을 사용하면 컬렉션의 개체에 대한 하나의 속성 값을 다중 열 목록으로 표시할 수 있습니다.
이 예제에서는 파일 이름과 크기(킬로바이트)를 넓은 목록으로 표시하려고 합니다. Format-Wide
둘 이상의 속성을 표시하지 않으므로 계산된 속성을 사용하여 두 속성의 값을 단일 값으로 결합합니다.
Get-ChildItem -File |
Format-Wide -Property @{e={'{0} ({1:N2}kb)' -f $_.name,($_.length/1kb)}}
.editorconfig (0.18kb) .gitattributes (0.41kb)
.gitignore (0.22kb) .localization-config (0.23kb)
.markdownlint.json (2.40kb) .openpublishing.build.ps1 (0.78kb)
.openpublishing.publish.config.json (2.25kb) .openpublishing.redirection.json (324.60kb)
build.ps1 (7.32kb) ci.yml (0.63kb)
ci-steps.yml (1.99kb) CONTRIBUTING.md (0.24kb)
daily.yml (1.24kb) LICENSE (18.60kb)
LICENSE-CODE (1.08kb) README.md (3.28kb)
ThirdPartyNotices (1.20kb)
Group-Object
cmdlet은 Group-Object
지정된 속성의 값에 따라 그룹에 개체를 표시합니다. 이 예제에서 계산된 속성은 각 콘텐츠 형식의 파일 수를 계산합니다.
Get-ChildItem -File |
Sort-Object extension |
Group-Object -NoElement -Property @{
expression={
switch ($_.extension) {
'.md' {'Content'}
'' {'Metacontent'}
'.ps1' {'Automation'}
'.yml' {'Automation'}
default {'Configuration'}
}
}
}
Count Name
----- ----
5 Automation
7 Configuration
2 Content
3 Metacontent
Measure-Object
cmdlet은 Measure-Object
개체의 숫자 속성을 계산합니다. 이 예제에서는 계산된 속성을 사용하여 1에서 10 사이의 숫자의 개수(합계)를 3으로 균등하게 나눌 수 있습니다.
1..10 | Measure-Object -Property {($_ % 3) -eq 0} -Sum
Count : 10
Average :
Sum : 3
Maximum :
Minimum :
StandardDeviation :
Property : ($_ % 3) -eq 0
참고 항목
다른 cmdlet과 Measure-Object
달리 계산된 속성에 대한 해시 테이블을 허용하지 않습니다. 스크립트 블록을 사용해야 합니다.
Select-Object
계산 속성을 사용하여 cmdlet을 사용하여 개체 출력에 멤버를 Select-Object
추가할 수 있습니다. 이 예제에서는 문자 C
로 시작하는 PowerShell 별칭을 나열합니다. 를 사용하여 Select-Object
별칭, 매핑된 cmdlet 및 cmdlet에 대해 정의된 매개 변수 수에 대한 개수를 출력합니다. 계산된 속성을 사용하여 ParameterCount 속성을 만들 수 있습니다.
$aliases = Get-Alias c* |
Select-Object Name,
Definition,
@{
name='ParameterCount'
expr={$_.Parameters.Keys.Count}
}
$aliases | Get-Member
$aliases
TypeName: Selected.System.Management.Automation.AliasInfo
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Definition NoteProperty string Definition=Get-Content
Name NoteProperty string Name=cat
ParameterCount NoteProperty System.Int32 ParameterCount=21
Name Definition ParameterCount
---- ---------- --------------
cat Get-Content 21
cd Set-Location 15
cdd Push-MyLocation 1
chdir Set-Location 15
clc Clear-Content 20
clear Clear-Host 0
clhy Clear-History 17
cli Clear-Item 20
clp Clear-ItemProperty 22
cls Clear-Host 0
clv Clear-Variable 19
cnsn Connect-PSSession 29
compare Compare-Object 20
copy Copy-Item 24
cp Copy-Item 24
cpi Copy-Item 24
cpp Copy-ItemProperty 23
cvpa Convert-Path 13
Sort-Object
계산된 속성을 사용하여 속성당 다양한 순서로 데이터를 정렬할 수 있습니다. 다음은 CSV 파일의 데이터를 날짜별로 오름차순으로 정렬하는 예제입니다. 그러나 각 날짜 내에 UnitsSold를 기준으로 행을 내림차순으로 정렬합니다.
Import-Csv C:\temp\sales-data.csv |
Sort-Object Date, @{expr={$_.UnitsSold}; desc=$true}, Salesperson |
Select-Object Date, Salesperson, UnitsSold
Date Salesperson UnitsSold
---- ----------- ---------
2020-08-01 Sally 3
2020-08-01 Anne 2
2020-08-01 Fred 1
2020-08-02 Anne 6
2020-08-02 Fred 2
2020-08-02 Sally 0
2020-08-03 Anne 5
2020-08-03 Sally 3
2020-08-03 Fred 1
2020-08-04 Anne 2
2020-08-04 Fred 2
2020-08-04 Sally 2
주의
식 스크립트 블록을 해시 테이블의 항목으로 지정하지 않고 인수로
Expression
직접 지정할 수 있습니다. 예시:'1', '10', '2' | Sort-Object { [int] $_ }
이 예제는 키(예
Sort-Object
Group-Object
: , 및Measure-Object
)를 통해 속성 이름을 지정할 필요(또는 지원)가 없는 cmdlet에Name
편리합니다.속성 이름을 지원하는 cmdlet의 경우 스크립트 블록은 문자열로 변환되고 출력에서 속성의 이름으로 사용됩니다.
Expression
스크립트 블록은 자식 범위에서 실행되므로 호출자의 변수를 직접 수정할 수 없습니다.파이프라인 논리는 스크립트 블록의 출력에
Expression
적용됩니다. 즉, 단일 요소 배열을 출력하면 해당 배열이 래핑 해제됩니다.대부분의 cmdlet의 경우 식 스크립트 블록 내의 오류는 조용히 무시됩니다. 문 종료 및 스크립트 종료 오류의 경우
Sort-Object
출력이지만 문을 종료하지는 않습니다.
참고 항목
PowerShell