PowerShell: Tải Kích cỡ Thư mục trên Đĩa trong Windows

0
20
get c:windows folder size using PowerShell

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 thư mục là mở thuộc tính thư mục trong File Explorer. 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 có được số liệu 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, bạn nên sử dụng các tính năng PowerShell. Trong bài viết này, chúng tôi sẽ chỉ cho bạn cách nhanh chóng có được kích thước của thư mục cụ thể trên đĩa (và tất cả các cặp con) bằng PowerShell.

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

Mẹo. Trong một trong những bài viết trước, chúng tôi đã chỉ 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ụ: để có được 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

get-childrenitem - powershell - folder size

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 trường Sum và khoảng 2,1 GB (kích thước được đưa ra theo 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 này:

(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 thập phân, hãy chạy lệnh sau:

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

PowerShell Calculating Folder Sizes - gci and measure sum

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 thư mục. Ví dụ: bạn muốn có được 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

get folder size in MB using powershell

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

"{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 ẩn và hệ thống, tôi cũng đã sử dụng đối số –lực.

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 (script bỏ qua nén NTFS).

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

get c:windows folder size using PowerShell

Kịch bản 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 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)

get windows folder size without hardlinks

Như bạn có thể thấy, kích thước thực tế 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 kích thước cuối cùng. Ví dụ: bạn có thể nhận được 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ể nhận được 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 có được kích thước của tất cả các hồ sơ người dùng trong thư mục C:Người dùng.

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

get user profiles size with powershell

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

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

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

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

get folder sizes on drive C: with posh

Như bạn có thể thấy, chế độ xem đồ họa của bảng sẽ xuất hiện nơi tất cả các thư mục trong gốc của hệ thống ổ C: và kích thước của chúng được hiển thị (bảng được tạo ra bởi Out-GridView lệnh ghép ngắn). Bằng cách bấm 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 sang tệp Excel.

Nếu bạn đang sử dụ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 chức năng riêng biệt:

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 function get-foldersize

Bạn có thể sử dụng chức năng PowerShell cục bộ để kiểm tra kích thước thư mục trên 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 function get foldersize on remote computer

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 phiên bản mới hơn của PowerShell Core 7.x.

Dịch từ: http://woshub.com/powershell-get-folder-sizes/

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây