Computer >> 컴퓨터 >  >> 체계 >> Windows Server

PowerShell:Windows에서 디스크의 폴더 크기 가져오기

대부분의 Windows 사용자는 폴더 크기를 확인하는 가장 쉬운 방법이 파일 탐색기에서 폴더 속성을 여는 것임을 알고 있습니다. 숙련된 사용자는 TreeSize와 같은 타사 도구 사용을 선호합니다. 또는 WinDirStat . 그러나 특정 디렉터리의 폴더 크기에 대한 자세한 통계를 얻거나 특정 파일 형식을 제외하려면 PowerShell 기능을 사용하는 것이 좋습니다. 이 기사에서는 PowerShell을 사용하여 디스크의 특정 폴더(및 모든 하위 폴더)의 크기를 빠르게 가져오는 방법을 보여줍니다.

Get-ChildItem을 사용할 수 있습니다. (gci 별칭) 및 측정 개체 (measure alias) cmdlet을 사용하여 PowerShell에서 파일 및 폴더(하위 폴더 포함)의 크기를 가져옵니다. 첫 번째 cmdlet을 사용하면 지정된 기준에 따라 지정된 디렉터리의 파일 목록(크기 포함)을 가져올 수 있고 두 번째 cmdlet은 산술 연산을 수행합니다.

팁. 이전 기사 중 하나에서 PowerShell의 Get-ChildItem cmdlet을 사용하여 디스크에서 가장 큰 파일을 찾는 방법을 보여주었습니다.

예를 들어, C:\ISO 폴더의 크기를 얻으려면 다음 명령을 실행하십시오.

Get-ChildItem C:\ISO | Measure-Object -Property Length -sum

PowerShell:Windows에서 디스크의 폴더 크기 가져오기

보시다시피 이 디렉토리에 있는 파일의 총 크기는 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:Windows에서 디스크의 폴더 크기 가져오기

PowerShell을 사용하여 디렉터리에 있는 특정 유형의 모든 파일의 총 크기를 계산할 수 있습니다. 예를 들어, 폴더에 있는 모든 ISO 파일의 총 크기를 얻으려고 합니다.

(gci c:\iso *.iso | measure Length -s).sum / 1Mb

PowerShell:Windows에서 디스크의 폴더 크기 가져오기

위에 표시된 명령을 사용하면 지정된 디렉토리에 있는 파일의 전체 크기만 가져올 수 있습니다. 디렉토리에 하위 폴더가 있는 경우 하위 폴더의 파일 크기는 계산되지 않습니다. 하위 디렉토리를 포함하여 디렉토리에 있는 파일의 총 크기를 얻으려면 –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를 사용하세요. 매개변수.

PowerShell:Windows에서 디스크의 폴더 크기 가져오기

이 스크립트는 기호 또는 하드 링크가 포함된 디렉토리의 크기를 잘못 계산합니다. 예를 들어, 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)

PowerShell:Windows에서 디스크의 폴더 크기 가져오기

보시다시피 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)
}

PowerShell:Windows에서 디스크의 폴더 크기 가져오기

% 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”

PowerShell:Windows에서 디스크의 폴더 크기 가져오기

보시다시피 테이블의 그래픽 보기는 시스템 드라이브 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:Windows에서 디스크의 폴더 크기 가져오기

로컬 PowerShell 기능을 사용하여 Invoke-Command를 통해 원격 컴퓨터의 폴더 크기를 확인할 수 있습니다. (PowerShell Remoting) cmdlet.

Invoke-Command -ComputerName hq-srv01 -ScriptBlock ${Function:Get-FolderSize} –ArgumentList 'C:\PS'

PowerShell:Windows에서 디스크의 폴더 크기 가져오기

이러한 명령은 최신 버전의 PowerShell Core 7.x를 포함하여 모든 PowerShell 버전에서 작동합니다.