Update check-drives.ps1

This commit is contained in:
Markus Fleschutz 2023-08-16 08:04:14 +02:00
parent 613a18f40f
commit 35cdf2cb96

View File

@ -2,60 +2,55 @@
.SYNOPSIS .SYNOPSIS
Checks the drive space Checks the drive space
.DESCRIPTION .DESCRIPTION
This PowerShell script checks all drives for free space left. This PowerShell script queries the free space of all drives and prints it.
.PARAMETER MinLevel .PARAMETER minLevel
Specifies the minimum warning level (10 GB by default) Specifies the minimum warning level (10 GB by default)
.EXAMPLE .EXAMPLE
PS> ./check-drives.ps1 PS> ./check-drives.ps1
Drive C: with 250GB at 10%, 225GB free Drive C: at 49% of 1TB, 512GB free
Drive D: at 84% of 4TB, 641GB free
.LINK .LINK
https://github.com/fleschutz/PowerShell https://github.com/fleschutz/PowerShell
.NOTES .NOTES
Author: Markus Fleschutz | License: CC0 Author: Markus Fleschutz | License: CC0
#> #>
param([int]$MinLevel = 10) # 10 GB minimum param([int]$minLevel = 10) # 10 GB minimum
function Bytes2String { param([int64]$Bytes) function Bytes2String { param([int64]$bytes)
if ($Bytes -lt 1000) { return "$Bytes bytes" } if ($bytes -lt 1000) { return "$bytes bytes" }
$Bytes /= 1000 $bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)KB" } if ($bytes -lt 1000) { return "$($bytes)KB" }
$Bytes /= 1000 $bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)MB" } if ($bytes -lt 1000) { return "$($bytes)MB" }
$Bytes /= 1000 $bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)GB" } if ($bytes -lt 1000) { return "$($bytes)GB" }
$Bytes /= 1000 $bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)TB" } if ($bytes -lt 1000) { return "$($bytes)TB" }
$Bytes /= 1000 $bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)PB" } return "$($bytes)PB"
$Bytes /= 1000
if ($Bytes -lt 1000) { return "$($Bytes)EB" }
} }
try { try {
Write-Progress "⏳ Querying drives..." Write-Progress "⏳ Querying drives..."
$Drives = Get-PSDrive -PSProvider FileSystem $drives = Get-PSDrive -PSProvider FileSystem
Write-Progress -completed "." Write-Progress -completed "."
foreach($Drive in $Drives) { foreach($drive in $drives) {
$Details = (Get-PSDrive $Drive.Name) $details = (Get-PSDrive $drive.Name)
if ($IsLinux) { $ID = $Drive.Name } else { $ID = $Drive.Name + ":" } if ($IsLinux) { $name = $drive.Name } else { $name = $drive.Name + ":" }
[int64]$Free = $Details.Free [int64]$free = $details.Free
[int64]$Used = $Details.Used [int64]$used = $details.Used
[int64]$Total = ($Used + $Free) [int64]$total = ($used + $free)
if ($Total -eq 0) { if ($total -eq 0) {
Write-Host "✅ Drive $ID is empty" Write-Host "✅ Drive $name is empty"
} elseif ($Free -eq 0) { } elseif ($free -eq 0) {
Write-Host "⚠️ Drive $ID with $(Bytes2String $Total) is 100% full" Write-Host "⚠️ Drive $name with $(Bytes2String $total) is 100% full"
} elseif ($Free -lt $MinLevel) { } elseif ($free -lt $minLevel) {
Write-Host "⚠️ Drive $ID with $(Bytes2String $Total) is nearly full, $(Bytes2String $Free) free" Write-Host "⚠️ Drive $name with $(Bytes2String $total) is nearly full, $(Bytes2String $free) free"
} else { } else {
[int]$Percent = ($Used * 100) / $Total [int]$percent = ($used * 100) / $total
if ($Percent -gt 90) { Write-Host "✅ Drive $name at $percent% of $(Bytes2String $total), $(Bytes2String $free) free"
Write-Host "✅ Drive $ID with $(Bytes2String $Total) is $Percent% full, $(Bytes2String $Free) free"
} else {
Write-Host "✅ Drive $ID with $(Bytes2String $Total) at $Percent%, $(Bytes2String $Free) free"
}
} }
} }
exit 0 # success exit 0 # success