Computer >> Máy Tính >  >> Hệ thống >> máy chủ Windows

PowerShell:Lấy kích thước thư mục trên đĩa trong Windows

Hầu hết người dùng Windows đều biết rằng cách dễ nhất để kiểm tra kích thước của một thư mục là mở thuộc tính thư mục trong File Explorer. Những người dùng có kinh nghiệm hơn thích sử dụng các công cụ của bên thứ ba như TreeSize hoặc WinDirStat . Tuy nhiên, nếu bạn muốn nhận được thống kê chi tiết hơn về kích thước của các thư mục trong thư mục cụ thể hoặc loại trừ một số loại tệp nhất định, tốt hơn bạn nên sử dụng các tính năng của PowerShell. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách lấy nhanh kích thước của thư mục cụ thể trên đĩa (và tất cả các thư mục con) bằng PowerShell.

Bạn có thể sử dụng Get-ChildItem (gci bí danh) và Đối tượng đo lường (measure bí danh) lệnh ghép ngắn để lấy kích thước của tệp và thư mục (bao gồm cả thư mục con) trong PowerShell. Lệnh ghép ngắn đầu tiên cho phép bạn lấy danh sách các tệp (với kích thước) trong thư mục được chỉ định theo các tiêu chí đã chỉ định và lệnh thứ hai thực hiện các phép toán số học.

Mẹo. Trong một trong các bài viết trước, chúng tôi đã hướng dẫn cách sử dụng lệnh ghép ngắn Get-ChildItem trong PowerShell để tìm các tệp lớn nhất trên đĩa.

Ví dụ:để lấy kích thước của thư mục C:\ ISO, hãy chạy lệnh sau:

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

PowerShell:Lấy kích thước thư mục trên đĩa trong Windows

Như bạn có thể thấy, tổng kích thước của các tệp trong thư mục này được hiển thị trong Sum và khoảng 2,1 GB (kích thước được tính bằng byte).

Để chuyển đổi kích thước thành MB hoặc GB thuận tiện hơn, hãy sử dụng lệnh sau:

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

Hoặc:

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

Để làm tròn kết quả thành hai số thập phân, hãy chạy lệnh sau:

"{0:N2} GB" -f ((gci c:\iso | measure Length -s).sum / 1Gb)

PowerShell:Lấy kích thước thư mục trên đĩa trong Windows

Bạn có thể sử dụng PowerShell để tính tổng kích thước của tất cả các tệp thuộc một loại nhất định trong một thư mục. Ví dụ:bạn muốn nhận tổng kích thước của tất cả các tệp ISO trong một thư mục:

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

PowerShell:Lấy kích thước thư mục trên đĩa trong Windows

Các lệnh hiển thị ở trên cho phép bạn chỉ lấy tổng kích thước của các tệp trong thư mục được chỉ định. Nếu có các thư mục con trong thư mục, thì kích thước của các tệp trong thư mục con sẽ không được tính toán. Để nhận tổng kích thước của các tệp trong thư mục bao gồm cả các thư mục con, hãy sử dụng –Recurse tham số. Hãy lấy tổng kích thước của các tệp trong C:\ Windows thư mục:

"{0:N2} GB" -f ((gci –force c:\Windows –Recurse -ErrorAction SilentlyContinue| measure Length -s).sum / 1Gb)

Để tính đến kích thước của các tệp hệ thống và ẩn, tôi đã sử dụng –force đối số cũng vậy.

Vì vậy, kích thước của C:\ Windows trên ổ đĩa cục bộ của tôi là khoảng 40 GB (tập lệnh bỏ qua nén NTFS).

Mẹo . Để ngăn lỗi truy cập thư mục (PermissionDenied -> DirUnauthorizedAccessError), hãy sử dụng -ErrorAction SilentlyContinue tham số.

PowerShell:Lấy kích thước thư mục trên đĩa trong Windows

Tập lệnh này tính toán không chính xác kích thước của một thư mục nếu nó chứa các liên kết tượng trưng hoặc liên kết cứng. Ví dụ:C:\Windows thư mục chứa nhiều liên kết cứng đến các tệp trong thư mục WinSxS (Windows Component Store). Kết quả là, các tệp như vậy có thể được đếm nhiều lần. Để bỏ qua các liên kết cứng trong kết quả, hãy sử dụng lệnh sau (mất nhiều thời gian để hoàn thành):

"{0:N2} GB" -f ((gci –force C:\windows –Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LinkType -notmatch "HardLink" }| measure Length -s).sum / 1Gb)

PowerShell:Lấy kích thước thư mục trên đĩa trong Windows

Như bạn có thể thấy, kích thước thực của thư mục Windows nhỏ hơn một chút.

Bạn có thể sử dụng bộ lọc để chọn các tệp cần xem xét khi tính toán kích thước cuối cùng. Ví dụ:bạn có thể lấy kích thước của các tệp được tạo vào năm 2020:

(gci -force c:\ps –Recurse -ErrorAction SilentlyContinue | ? {$_.CreationTime -gt ‘1/1/20’ -AND $_.CreationTime -lt ‘12/31/20’}| measure Length -s).sum / 1Gb

Bạn có thể lấy kích thước của tất cả các thư mục con cấp một trong thư mục được chỉ định. Ví dụ:bạn muốn nhận kích thước của tất cả hồ sơ người dùng trong thư mục 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:Lấy kích thước thư mục trên đĩa trong Windows

% là bí danh cho foreach-object vòng lặp.

Hãy tiếp tục. Giả sử, nhiệm vụ của bạn là tìm kích thước của từng thư mục trong thư mục gốc của ổ cứng hệ thống và trình bày thông tin dưới dạng bảng thuận tiện cho việc phân tích và có thể được sắp xếp theo kích thước thư mục.

Để nhận thông tin về kích thước của các thư mục trên ổ C:\ hệ thống, hãy chạy tập lệnh PowerShell sau:

$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:Lấy kích thước thư mục trên đĩa trong Windows

Như bạn có thể thấy, dạng xem đồ họa của bảng sẽ xuất hiện nơi tất cả các thư mục trong thư mục gốc của ổ đĩa hệ thống C:\ và kích thước của chúng được hiển thị (bảng được tạo bởi Out-GridView cmdlet). Bằng cách nhấp vào tiêu đề cột, bạn có thể sắp xếp các thư mục theo kích thước. Bạn cũng có thể xuất kết quả sang CSV (| Export-Csv folder_size.csv ) hoặc vào một tệp Excel.

Nếu bạn đang sử dụng tính năng kiểm tra kích thước thư mục trong tập lệnh PowerShell, bạn có thể tạo một hàm riêng:

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
}
}
}

Để sử dụng hàm, chỉ cần chạy lệnh với đường dẫn thư mục làm đối số:

Get-FolderSize ('C:\PS')

PowerShell:Lấy kích thước thư mục trên đĩa trong Windows

Bạn có thể sử dụng chức năng PowerShell cục bộ của mình để kiểm tra kích thước thư mục trên các máy tính từ xa thông qua Invoke-Command Lệnh ghép ngắn (PowerShell Remoting).

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

PowerShell:Lấy kích thước thư mục trên đĩa trong Windows

Các lệnh này hoạt động trong tất cả các phiên bản PowerShell, bao gồm cả các phiên bản mới hơn của PowerShell Core 7.x.