PowerShell script to check the drive space of each server, and send an email if any are below a given threshold.
[Source](http://gavindraper.com/2012/09/22/automatic-low-hard-disk-alerts-for-windows-server/ "Permalink to Automated Disk Space Alerts For Windows Server")
# Automated Disk Space Alerts For Windows Server
### PowerShell Style
I recently needed to automate disk alerts for each of our servers, to keep it
simple I wrote a little PowerShell script to check the drive space of each
server I'm interested in and send an email if any are below a given threshold. I
then configured a scheduled task on one of the servers to run this script every
hour. It seems to work quite well so far, touch wood.
The script looks like this....
$minGbThreshold = 25;
$computers = "localhost", "server1", "server2";
$smtpAddress = "smtp.myserver.com";
$toAddress = "gavin@gavin.com";
$fromAddress = "alerter@gavin.com";
foreach($computer in $computers)
{
$disks = Get-WmiObject -ComputerName $computer -Class Win32_LogicalDisk -Filter "DriveType = 3";
$computer = $computer.toupper();
$deviceID = $disk.DeviceID;
foreach($disk in $disks)
{
$freeSpaceGB = [Math]::Round([float]$disk.FreeSpace / 1073741824, 2);
if($freeSpaceGB -lt $minGbThreshold)
{
$smtp = New-Object Net.Mail.SmtpClient($smtpAddress)
$msg = New-Object Net.Mail.MailMessage
$msg.To.Add($toAddress)
$msg.From = $fromAddress
$msg.Subject = "Diskspace below threshold " + $computer + "" + $disk.DeviceId
$msg.Body = $computer + "" + $disk.DeviceId + " " + $freeSpaceGB + "GB Remaining";
$smtp.Send($msg)
}
}
}
As you can see the top 5 lines are the configuration variables that define the
parameters for the script to run within.
To make the script run as a scheduled task without having PowerShell flash up on
the server I used the hidden window style argument in the program to run textbox
of the Windows Task Scheduler. It looks like this...
PowerShell.exe -WindowStyle "Hidden" Script.ps1