대부분의 Windows 사용자는 폴더 크기를 확인하는 가장 쉬운 방법이 파일 탐색기에서 폴더 속성을 여는 것임을 알고 있습니다. 숙련된 사용자는 TreeSize와 같은 타사 도구 사용을 선호합니다. 또는 WinDirStat . 그러나 특정 디렉터리의 폴더 크기에 대한 자세한 통계를 얻거나 특정 파일 형식을 제외하려면 PowerShell 기능을 사용하는 것이 좋습니다. 이 기사에서는 PowerShell을 사용하여 디스크의 특정 폴더(및 모든 하위 폴더)의 크기를 빠르게 가져오는 방법을 보여줍니다.
Get-ChildItem을 사용할 수 있습니다. (gci
별칭) 및 측정 개체 (measure
alias) cmdlet을 사용하여 PowerShell에서 파일 및 폴더(하위 폴더 포함)의 크기를 가져옵니다. 첫 번째 cmdlet을 사용하면 지정된 기준에 따라 지정된 디렉터리의 파일 목록(크기 포함)을 가져올 수 있고 두 번째 cmdlet은 산술 연산을 수행합니다.
예를 들어, C:\ISO 폴더의 크기를 얻으려면 다음 명령을 실행하십시오.
Get-ChildItem C:\ISO | Measure-Object -Property Length -sum
보시다시피 이 디렉토리에 있는 파일의 총 크기는 Sum에 표시됩니다. 필드이며 약 2.1GB입니다(크기는 바이트 단위로 표시됨).
크기를 보다 편리한 MB 또는 GB로 변환하려면 다음 명령을 사용하십시오.
(gci c:\iso | measure Length -s).sum / 1Gb
또는:
(gci c:\iso | measure Length -s).sum / 1Mb
결과를 소수점 이하 두 자리로 반올림하려면 다음 명령을 실행하십시오.
"{0:N2} GB" -f ((gci c:\iso | measure Length -s).sum / 1Gb)
PowerShell을 사용하여 디렉터리에 있는 특정 유형의 모든 파일의 총 크기를 계산할 수 있습니다. 예를 들어, 폴더에 있는 모든 ISO 파일의 총 크기를 얻으려고 합니다.
(gci c:\iso *.iso | measure Length -s).sum / 1Mb
위에 표시된 명령을 사용하면 지정된 디렉토리에 있는 파일의 전체 크기만 가져올 수 있습니다. 디렉토리에 하위 폴더가 있는 경우 하위 폴더의 파일 크기는 계산되지 않습니다. 하위 디렉토리를 포함하여 디렉토리에 있는 파일의 총 크기를 얻으려면 –Recurse
를 사용하십시오. 매개변수. C:\Windows에 있는 파일의 총 크기를 알아보겠습니다. 폴더:
"{0:N2} GB" -f ((gci –force c:\Windows –Recurse -ErrorAction SilentlyContinue| measure Length -s).sum / 1Gb)
숨김 및 시스템 파일의 크기를 고려하기 위해 –force를 사용했습니다. 주장도 마찬가지입니다.
따라서 로컬 드라이브의 C:\Windows 크기는 약 40GB입니다(스크립트는 NTFS 압축을 무시함).
도움말 . 디렉터리 액세스 오류(PermissionDenied -> DirUnauthorizedAccessError)를 방지하려면 -ErrorAction SilentlyContinue
를 사용하세요. 매개변수.
이 스크립트는 기호 또는 하드 링크가 포함된 디렉토리의 크기를 잘못 계산합니다. 예를 들어, C:\Windows
폴더에는 WinSxS 폴더(Windows 구성 요소 저장소)에 있는 파일에 대한 많은 하드 링크가 포함되어 있습니다. 결과적으로 이러한 파일은 여러 번 계산될 수 있습니다. 결과에서 하드 링크를 무시하려면 다음 명령을 사용하십시오(완료하는 데 시간이 오래 걸림).
"{0:N2} GB" -f ((gci –force C:\windows –Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LinkType -notmatch "HardLink" }| measure Length -s).sum / 1Gb)
보시다시피 Windows 폴더의 실제 크기는 약간 작습니다.
필터를 사용하여 최종 크기를 계산할 때 고려할 파일을 선택할 수 있습니다. 예를 들어 2020년에 생성된 파일의 크기를 확인할 수 있습니다.
(gci -force c:\ps –Recurse -ErrorAction SilentlyContinue | ? {$_.CreationTime -gt ‘1/1/20’ -AND $_.CreationTime -lt ‘12/31/20’}| measure Length -s).sum / 1Gb
지정된 디렉터리에 있는 모든 첫 번째 수준 하위 폴더의 크기를 가져올 수 있습니다. 예를 들어, C:\Users 폴더에 있는 모든 사용자 프로필의 크기를 얻으려고 합니다.
gci -force 'C:\Users'-ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
$_.fullname, '{0:N2} GB' -f ($len / 1Gb)
}
%
foreach-object
의 별칭입니다. 루프.
계속하자. 귀하의 작업이 시스템 하드 드라이브의 루트에서 각 디렉토리의 크기를 찾고 분석을 위해 편리한 테이블 형식으로 정보를 표시하고 폴더 크기별로 정렬할 수 있다고 가정해 보겠습니다.
시스템 C:\ 드라이브의 디렉터리 크기에 대한 정보를 얻으려면 다음 PowerShell 스크립트를 실행하십시오.
$targetfolder='C:\'
$dataColl = @()
gci -force $targetfolder -ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
$foldername = $_.fullname
$foldersize= '{0:N2}' -f ($len / 1Gb)
$dataObject = New-Object PSObject
Add-Member -inputObject $dataObject -memberType NoteProperty -name “foldername” -value $foldername
Add-Member -inputObject $dataObject -memberType NoteProperty -name “foldersizeGb” -value $foldersize
$dataColl += $dataObject
}
$dataColl | Out-GridView -Title “Size of subdirectories”
보시다시피 테이블의 그래픽 보기는 시스템 드라이브 C:\의 루트에 있는 모든 폴더와 해당 크기가 표시되는 위치에 나타나야 합니다(테이블은 Out-GridView
cmdlet). 열 머리글을 클릭하면 폴더를 크기별로 정렬할 수 있습니다. 결과를 CSV(| Export-Csv folder_size.csv
)로 내보낼 수도 있습니다. ) 또는 Excel 파일로.
PowerShell 스크립트에서 디렉터리 크기 검사를 사용하는 경우 별도의 함수를 만들 수 있습니다.
function Get-FolderSize {
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true,ValueFromPipeline=$true)]
$Path
)
if ( (Test-Path $Path) -and (Get-Item $Path).PSIsContainer ) {
$Measure = Get-ChildItem $Path -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum
$Sum = '{0:N2}' -f ($Measure.Sum / 1Gb)
[PSCustomObject]@{
"Path" = $Path
"Size($Gb)" = $Sum
}
}
}
이 기능을 사용하려면 폴더 경로를 인수로 사용하여 명령을 실행하기만 하면 됩니다.
Get-FolderSize ('C:\PS')
로컬 PowerShell 기능을 사용하여 Invoke-Command
를 통해 원격 컴퓨터의 폴더 크기를 확인할 수 있습니다. (PowerShell Remoting) cmdlet.
Invoke-Command -ComputerName hq-srv01 -ScriptBlock ${Function:Get-FolderSize} –ArgumentList 'C:\PS'
이러한 명령은 최신 버전의 PowerShell Core 7.x를 포함하여 모든 PowerShell 버전에서 작동합니다.