PowerShell Measure-Object: 예제와 함께 완벽한 가이드

객체의 문자, 단어 및 줄과 같은 숫자 속성을 계산하거나 계산하는 것은 짜증스러울 수 있습니다. 다행히도, PowerShell의 Measure-Object cmdlet은 이 작업을 수행할 수 있습니다.

이 튜토리얼에서는 PowerShell에서 객체 속성을 자동으로 측정하는 Measure-Object cmdlet의 기능을 배우게 될 것입니다.

객체 측정 기술을 향상시키기 위해 바로 시작해 보세요!

전제 조건

이 튜토리얼은 실습을 위한 데모입니다. 따라하기 위해서는 PowerShell이 설치된 시스템이 필요합니다. 이 튜토리얼은 PowerShell v7을 사용하는 Windows 10을 기반으로 합니다.

파일 및 폴더 개수 세기

디렉토리의 파일 및 폴더 개수를 알면 다양한 시나리오에서 도움이 될 수 있습니다. 예를 들어 폴더의 크기를 모니터링하거나 디렉토리의 파일 수를 확인해야 할 때 등이 있습니다.

Measure-Object cmdlet은 디렉토리의 파일 및 폴더 개수를 세어줍니다. 정확한 개수는 시스템 리소스를 더 잘 관리하고 최적화하는 데 도움이 됩니다.

Measure-Object cmdlet을 사용하여 파일 및 폴더 개수를 계산하는 방법을 확인해 보겠습니다:

1. PowerShell을 열고, 현재 디렉토리에서 파일과 폴더의 총 개수를 계산하고 반환하기 위해 다음 Get-ChildItem 명령을 실행하십시오.

Get-ChildItem | Measure-Object

아래 출력은 현재 디렉토리에 있는 파일과 폴더의 개수인 4852를 나타냅니다.

Counting the files and folders in the current directory

아마도 디렉토리 트리 전체에서 모든 파일과 하위 디렉토리를 포함하고 싶을 것입니다. 그렇다면 아래와 같이 -Recurse 매개변수를 추가하십시오. Get-ChildItem -Recurse | Measure-Object

2. 다음으로, 작업 디렉토리 내의 총 디렉토리만을 계산하기 위해 이전 단계에서 수행한 동일한 명령을 실행하십시오. 이번에는 -Directory 매개변수를 추가하여 디렉토리만을 계산하도록 합니다.

Get-ChildItem -Directory | Measure-Object

아래에서 볼 수 있듯이, 명령은 디렉토리만을 카운트하여 다른 모든 객체를 제외하였기 때문에 총 개수가 낮아졌습니다(135).

Counting the number of directories in the current directory

3. 이제 현재 디렉토리에서 실행 가능한 파일(.exe)의 개수를 계산하기 위해 아래 명령을 실행하십시오.

-Filter 매개변수는 Get-ChildItem cmdlet에 결과를 필터링하여 지정한 확장자를 가진 파일만 반환하도록 지시합니다(예: *.txt, *.jpg, *.csv).

Get-ChildItem -Filter *.exe | Measure-Object
Counting the number of executable files in a directory

파일 크기 측정

객체의 길이와 크기를 측정하는 것은 시스템의 성능을 개선하는 데 도움이 됩니다. 속성을 계산하는 것 외에도 Measure-Object cmdlet을 사용하여 객체의 길이와 크기를 측정할 수도 있습니다.

아래 코드를 실행하여 현재 디렉토리의 모든 파일(Get-ChildItem)을 검색하고 기본적으로 바이트 단위로 해당 파일의 길이를 표시합니다(Write-Host).

아래 코드는 최소 파일 크기, 최대 파일 크기, 평균 파일 크기, 파일 크기의 합계, 파일의 총 개수를 콘솔에 출력합니다.

# 평균 파일 크기의 임계값 설정
$threshold = 5000000 
# 현재 디렉토리의 각 파일의 크기 측정
$files = Get-ChildItem | Measure-Object -Property length -Minimum -Maximum -Sum -Average

Write-Host "Minimum file size: $($files.Minimum) bytes"
Write-Host "Maximum file size: $($files.Maximum) bytes"
Write-Host "Sum of file sizes: $($files.Sum) bytes"
Write-Host "Average file size: $($files.Average) bytes"
Write-Host "Total number of files: $($files.Count)"

# 평균 파일 크기가 임계값을 초과하는지 확인
if ($files.Average -ge $threshold) {
    # 평균 파일 크기가 임계값을 초과하는 경우 고음 재생
    [console]::beep(1000, 500)
} else {
    # 평균 파일 크기가 임계값을 초과하지 않는 경우 저음 재생
    [console]::beep(500, 500)
}

아래에서는 바이트 단위로 표시된 크기를 볼 수 있습니다.

Measuring file sizes

콘솔에 코드를 붙여넣는 것이 어렵다면, PowerShell 스크립트 파일로 코드를 저장하고 실행하십시오.

이제 다음 명령어를 실행하여 현재 디렉토리에서 파일을 가져오고, 그 크기가 최대 파일 크기($files.Maximum)와 동일한 파일을 얻으십시오.

# $files.Maximum과 크기가 같은 파일을 가져와 저장합니다.
$max = Get-ChildItem | Where-Object -FilterScript {$_.Length -eq $files.Maximum}
# 최대 크기($files.Maximum)와 해당 크기의 파일의 값을 표시합니다.
Write-Host "Maximum file size: $($files.Maximum) bytes `nFile: $max"

아래 출력에서는 현재 디렉토리에서 가장 큰 파일의 이름을 보여줍니다.

Getting the most extensive file in size

텍스트 파일 내용 측정

파일 크기를 측정하는 대신, 텍스트 파일의 라인 수, 단어 수 또는 문자 수를 결정해야 할 수 있습니다. 그렇다면, Measure-Object cmdlet은 텍스트 파일 내용을 측정하기 위한 많은 다른 매개변수를 가지고 있습니다.

아래 코드를 실행하여 다음을 수행하십시오. 텍스트 파일의 내용을 -Character, -Line, -Word로 측정하고 측정 결과를 출력하십시오.

$file_path$file_content 변수의 값을 원하는 값으로 변경하십시오.

# 파일 경로와 내용 정의하기
$file_path = "C:\Temp\measure-object.txt"
$file_content = "One fish, two fishes, three fishes"

# 정의된 파일 경로와 내용으로 파일 생성하기
Set-Content -Path $file_path -Value $file_content

# 텍스트 파일의 내용 측정하기
$measurements = Get-Content -Path $file_path | Measure-Object -Character -Line -Word

# 측정 결과 콘솔에 출력하기
Write-Host "The file '$file_path' contains $($measurements.Lines) lines, $($measurements.Words) words, and $($measurements.Characters) characters."
Measuring text file contents

부울 값 측정하기

부울 값은 참 또는 거짓만 가질 수 있는 값입니다. PowerShell에서는 부울 값은 스크립트의 흐름을 제어하거나 조건(참 또는 거짓)을 결정하거나 명령의 성공 또는 실패를 나타내는 데 자주 사용됩니다.

부울 값 측정은 다음과 같은 다양한 시나리오에서 유용할 수 있습니다:

  • 데이터 세트에서 참 또는 거짓 값의 개수 세기.
  • 참 값의 비율을 전체 값의 비율로 확인하기.

이 정보는 데이터 처리 또는 분석에서 정확한 결정을 내릴 수 있도록 도움이 됩니다.

부울 값 측정이 어떻게 작동하는지 확인하려면:

다음 명령을 실행하여 배열 ($values)에서 부울 값 (기본적으로 true 값)의 합계를 계산하십시오.

# 부울 값 (true 및 false)의 배열 정의.
$values = $true,$false,$false,$true,$true,$true,$false,$false,$true
# 부울 값 (기본적으로 true 값)의 측정 (카운트).
$values | Measure-Object -Sum

아래에서, 부울 값의 총 카운트는 9이며, 합계는 5입니다. 왜냐하면 true 값만 계산되기 때문입니다(9).

그렇다면 false 값은 어떻게 될까요? 다음 단계로 이동하여 몇 가지 명령을 실행하십시오.

Counting the number of true values in an array

이제 아래 코드를 실행하여 true 값의 합계($trueCount)를 전체 부울 값의 개수($count)에서 빼면 차이는 false 값의 총 개수($falseCount)입니다.

# 배열에서 부울 값의 총 개수 가져오기
$count = $values.Count
# true 값의 합계 가져오기
$trueCount = ($values | Measure-Object -Sum).Sum
# true 값의 합계에서 전체 부울 값 빼기
# false 값의 총 개수 얻기
$falseCount = $count - $trueCount
# true 값과 false 값의 총 개수 표시
Write-Host "Number of true values: $trueCount"
Write-Host "Number of false values: $falseCount"
Counting the number of false values

불리언 값 측정이 일상적인 작업이라면, 언제든지 호출할 수 있는 함수를 만들어 작업을 실행할 수 있습니다.

해시테이블 측정

PowerShell의 해시테이블(키-값 쌍의 컬렉션)은 데이터를 빠르고 효율적으로 저장하고 검색할 수 있게 해줍니다. 해시테이블의 항목 수나 최대 및 최소값이 필요한 경우, Measure-Object cmdlet을 사용하여 해시테이블을 측정할 수 있습니다.

아래 명령을 실행하여 해시테이블($MyHastable)의 Num 속성의 -Minimum-Maximum 값을 찾을 수 있습니다.

# Num 속성을 가진 세 개의 해시테이블을 포함하는 해시테이블 생성
$MyHashtable = @(@{Num=10}, @{Num=20}, @{Num=30})
# 해시테이블의 Num 속성을 최소 및 최대로 측정
$Stats = $MyHashtable | Measure-Object -Minimum -Maximum Num
# 해시테이블 측정 결과 표시
$Stats
Measuring hashtables

표준 편차 측정

데이터 세트를 검토하는 것은 장황할 수 있지만 그럴 필요는 없습니다. 표준 편차를 측정하면 데이터 세트 값의 분포를 이해하는 데 유용합니다. 또한 결과에 영향을 주는 이상치나 이상한 데이터 포인트를 식별할 수도 있습니다.

표준 편차는 데이터 세트 값들의 평균값에서의 변동성이나 분산을 측정하는 것입니다. 이 측정은 데이터의 분산을 제곱 차이의 평균인 분산의 제곱근을 구하여 계산됩니다.

아래의 코드를 실행하여 -평균-표준편차를 계산하고 표시합니다. 이때 숫자 배열은 $Numbers 변수에 저장됩니다.

# 숫자 배열 정의
$Numbers = 10, 20, 30, 40, 50

# 숫자들의 평균과 표준 편차 계산
$Average = ($Numbers | Measure-Object -Average).Average
$StdDev = ($Numbers | Measure-Object -StandardDeviation).StandardDeviation

# 결과 출력
"Average: $Average"
"Standard deviation: $StdDev"

통계학에서 평균은 중심 경향성을 측정하며 데이터 세트의 전형적이거나 대표적인 값을 설명합니다.

평균은 데이터 세트의 모든 숫자를 더한 후 값의 총 개수로 나누어 계산됩니다. 이 예제에서는 데이터 세트가 {10, 20, 30, 40, 50}이며 합계는 150이고 숫자 개수는 5입니다(5).

따라서 아래와 같이 평균이 계산됩니다: 30.

Average = (10 + 20 + 30 + 40 + 50) / 5 = 30

반면, 표준 편차는 데이터 세트의 분포나 퍼짐 정도를 측정합니다. 표준 편차는 다음과 같이 계산됩니다:

1. Find the difference between each data point and the average:
   10 - 30 = -20
   20 - 30 = -10
   30 - 30 = 0
   40 - 30 = 10
   50 - 30 = 20
   
2. Square each of these differences:
   (-20)^2 = 400
   (-10)^2 = 100
   0^2 = 0
   10^2 = 100
   20^2 = 400
   
3. Add up all the squared differences:
   400 + 100 + 0 + 100 + 400 = 1000
   
4. Divide the sum of squared differences by the total number of values:
   1000 / 5 = 200
   
5. Take the square root of the result:
   sqrt(200) = 14.142135623731
   
The standard deviation of this set of data is approximately 14.14. But 
in this case, the result is 15.8113883008419 
because of floating-point arithmetic limitations in computers.
Measuring the standard deviation

결론

데이터 측정은 필수적인 작업이며, PowerShell의 Measure-Object cmdlet은 이 작업을 완료하기 위한 강력한 도구입니다. 이 튜토리얼에서는 다양한 방법으로 데이터를 측정하는 방법을 배웠습니다. 파일, 텍스트 파일 내용, 부울 값, 문자열, 배열 또는 해시테이블과 작업 중이든지 관계없이 데이터를 측정하면 유용한 통찰력을 제공할 수 있습니다.

이제 데이터의 평균, 최대값 및 최소값을 손쉽게 계산하고 데이터의 변동성이나 분포를 측정할 수 있습니다. 이러한 기능을 통해 데이터에 대한 깊은 이해를 얻고 분석에 기반한 정보를 활용하여 결정을 내릴 수 있습니다.

이 새로운 지식을 활용하여 PowerShell 도구 상자를 확장하고 Compare-Object를 추가해보는 것은 어떨까요?

Source:
https://adamtheautomator.com/powershell-measure-object/