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

PowerShell:Kiểm tra dung lượng đĩa trống và mức sử dụng đĩa

Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách kiểm tra dung lượng đĩa trống và mức sử dụng đĩa trên máy chủ Windows cục bộ hoặc từ xa bằng PowerShell. Ngoài ra, hãy xem xét cách thông báo cho quản trị viên bằng thông báo bật lên hoặc email nếu vượt quá ngưỡng dung lượng trống.

Cách kiểm tra dung lượng trống của Drive trên Windows bằng WMI và PowerShell?

Bạn có thể nhận thông tin về các ổ đĩa logic của mình trong Windows bằng cách sử dụng Win32_logicalDisk Lớp WMI.

Lệnh bên dưới sẽ hiển thị tất cả thông tin về các ổ đĩa logic trên máy tính của bạn:

Get-WmiObject -Class Win32_LogicalDisk

Nếu bạn đang sử dụng PowerShell Core 7.x mới hơn, hãy lưu ý rằng WMI không được hỗ trợ trong phiên bản PowerShell này (vì PowerShell Core dựa trên .Net Core). Nếu bạn cố gắng chạy lệnh Get-WmiObject, bạn sẽ thấy lỗi sau:The term 'Get-WmiObject' is not recognized as a name of a cmdlet, function, script file, or executable program . Sử dụng CIM thay vì WMI, ví dụ:

Get-CimInstance win32_logicaldisk

PowerShell:Kiểm tra dung lượng đĩa trống và mức sử dụng đĩa

Thuộc tính FreeSpace chứa dung lượng trống tính bằng byte còn lại trên mỗi ổ đĩa. Để thuận tiện hơn, bạn có thể chuyển đổi nó sang GB và hiển thị dung lượng trống trên mỗi đĩa logic theo% (tỷ lệ giữa dung lượng trống trên tổng dung lượng đĩa). Bạn có thể sử dụng tập lệnh PowerShell sau:

Get-WmiObject -Class Win32_LogicalDisk |
Select-Object -Property DeviceID, VolumeName, @{Label='FreeSpace (Gb)'; expression={($_.FreeSpace/1GB).ToString('F2')}},
@{Label='Total (Gb)'; expression={($_.Size/1GB).ToString('F2')}},
@{label='FreePercent'; expression={[Math]::Round(($_.freespace / $_.size) * 100, 2)}}|ft

PowerShell:Kiểm tra dung lượng đĩa trống và mức sử dụng đĩa

Tập lệnh hiển thị danh sách các ổ đĩa logic, kích thước của chúng và phần trăm dung lượng trống.

Để sử dụng tập lệnh này trong PowerShell Core, chỉ cần thay thế Get-WmiObject với Get-CimInstance .

Nếu bạn không muốn chỉ hiển thị thông tin về dung lượng trống trên đĩa mà hãy thực hiện một số hành động (gửi e-mail hoặc hiển thị thông báo bật lên) nếu có ít dung lượng trống hơn ngưỡng đã chỉ định, bạn có thể sử dụng tập lệnh PowerShell bên dưới:

$percentWarning = 20
$percentCritcal = 5
$ListDisk = Get-WmiObject -Class Win32_LogicalDisk
Foreach($Disk in $ListDisk){
if ($Disk.size -ne $NULL) {
$DiskFreeSpace = ($Disk.freespace/1GB).ToString('F2')
$DiskFreeSpacePercent = [Math]::Round(($Disk.freespace/$Disk.size) * 100, 2)
if($DiskFreeSpacePercent -lt $percentWarning){
$Message= "Warning!"
if($DiskFreeSpacePercent -lt $percentCritcal){
$Message= "Alert!"
}
$wshell = New-Object -ComObject Wscript.Shell
$Output = $wshell.Popup("Disk $($Disk.DeviceID) has only $DiskFreeSpace GB of free space left",0,$Message,48)
}
}
}

PowerShell:Kiểm tra dung lượng đĩa trống và mức sử dụng đĩa

Tập lệnh này đặt các giá trị ngưỡng của dung lượng trống còn lại trên đĩa - 5% và 20%. Nếu dung lượng trống trên bất kỳ đĩa nào thấp hơn giá trị được chỉ định, một cửa sổ thông tin phương thức sẽ được hiển thị. Bạn có thể hiển thị nó dưới dạng thông báo bật lên hoặc chạy ngay công cụ Dọn dẹp Ổ đĩa (cleanmgr.exe ).

Nếu bạn muốn gửi email cho quản trị viên của sự cố, bạn có thể gửi email qua máy chủ SMTP (nó có thể là máy chủ Exchange hoặc bất kỳ dịch vụ SMTP nào khác, ngay cả vai trò SMTP của Windows Server tích hợp cũng sẽ làm được) với Send-MailMessage lệnh ghép ngắn:

Send-MailMessage -To “srv_admin@woshub.com” -From “$env:computername@woshub.com” -Subject “Insufficient disk space on server $env:computername” -Body “Disk $($Disk.DeviceID) has only $DiskFreeSpace GB left” -Credential (Get-Credential) -SmtpServer smtp.woshub.com -Port 587

Trong ví dụ này, bạn cần nhập thông tin đăng nhập để kết nối tương tác với máy chủ SMTP. Bạn có thể định cấu hình máy chủ SMTP của mình để chấp nhận thư từ máy chủ đáng tin cậy mà không cần xác thực hoặc định cấu hình xác thực SMTP bằng thông tin đăng nhập đã lưu trong tệp (không thể sử dụng Tài khoản dịch vụ được quản lý để gửi email).

Bạn có thể chạy tập lệnh PowerShell thường xuyên bằng Bộ lập lịch tác vụ hoặc nó có thể được định cấu hình như một dịch vụ Windows. Nếu không có đủ dung lượng trống trên máy chủ Windows này, quản trị viên sẽ nhận được thông báo.

Nhận Dung lượng đĩa trống từ Máy chủ Windows Từ xa qua PowerShell

Lệnh ghép ngắn Invoke-Command có thể được sử dụng để chạy tập lệnh PS nhằm kiểm tra dung lượng trống còn lại trên các máy tính từ xa.

Invoke-Command -ComputerName srv01,srv02,srv03 -FilePath "C:\PS\checkfreespace.ps1"

Nếu máy chủ bạn muốn kiểm tra dung lượng trống trong miền của bạn, bạn có thể lấy danh sách chúng từ Active Directory bằng cách sử dụng lệnh ghép ngắn Get-ADComputer và chạy tập lệnh trên từng máy chủ:

$computers = (Get-ADComputer -Filter 'operatingsystem -like "*Windows Server*" -and enabled -eq "true"').Name
Invoke-Command -ComputerName $computers -FilePath "C:\PS\checkfreespace.ps1" -ErrorAction SilentlyContinue

Bạn cũng có thể sử dụng RemoteWMI để lấy dữ liệu WMI từ các máy tính từ xa:

Get-WmiObject -Class Win32_logicalDisk -ComputerName srv01,srv02,srv03

Hướng dẫn này mô tả giải pháp tự tạo đơn giản nhất để theo dõi dung lượng ổ đĩa. Nếu bạn có nhiều máy chủ cần được theo dõi, tốt hơn là sử dụng hệ thống giám sát đầy đủ tính năng (như Zabbix, Icinga, PRTG, Nagios, v.v.).