# ----------------------------------------------------------------------------
# Version:
# Created by:
# Created on:
# Updated on:
# Script Function:
---------------------------------------------------------------------------- #>
# edit below this line! #
#############################################################################
#
# Check disk space and send an HTML report as the body of an email.
# Reports only disks on computers that have low disk space.
#############################################################################
# Continue even if there are errors
$ErrorActionPreference = "Continue";
#########################################################################################
# Items to change to make it work for you.
#
# EMAIL PROPERTIES
# - the $users that this report will be sent to.
# - near the end of the script the smtpserver, From and Subject.
# REPORT PROPERTIES
# - you can edit the report path and report name of the html file that is the report.
#########################################################################################
# Set your warning and critical thresholds
$percentWarning = 20;
$percentCritcal = 10;
# EMAIL PROPERTIES
# Set the recipients of the report.
#$users = "";
$users = "" # I use this for testing by uing my email address.
#$users = "you@company.com", "manager@company.com", "etc@company.com"; # can be sent to individuals.
# REPORT PROPERTIES
# Path to the report
$reportPath = "C:\Scripts_new\DiskSpace_Output1\";
# Report name
$reportName = "DiskSpaceRpt_$(get-date -format ddMMyyyy).html";
# Path and Report name together
$diskReport = $reportPath + $reportName
#Set colors for table cell backgrounds
$redColor = "#FF0000"
$orangeColor = "#FBB917"
$whiteColor = "#FFFFFF"
# Count if any computers have low disk space. Do not send report if less than 1.
$i = 0;
# Get computer list to check disk space
$computers = Get-Content "C:\Scripts_new\Disk Space\Servers1.txt";
$datetime = Get-Date -Format "MM-dd-yyyy_HHmmss";
# Remove the report if it has already been run today so it does not append to the existing report
If (Test-Path $diskReport)
{
Remove-Item $diskReport
}
# Cleanup old files..
$Daysback = "-7"
$CurrentDate = Get-Date;
$DateToDelete = $CurrentDate.AddDays($Daysback);
Get-ChildItem $reportPath | Where-Object { $_.LastWriteTime -lt $DatetoDelete } | Remove-Item;
# Create and write HTML Header of report
$titleDate = get-date -uformat "%m-%d-%Y - %A"
$header = "
LYCRA Daily DiskSpace Report
Environment DiskSpace Report for $titledate
|
"
Add-Content $diskReport $header
# Create and write Table header for report
$tableHeader = "
Server |
Drive |
Drive Label |
Total Capacity(GB) |
Used Capacity(GB) |
Free Space(GB) |
Freespace % |
"
Add-Content $diskReport $tableHeader
# Start processing disk space reports against a list of servers
foreach($computer in $computers)
{
$computer
$disks = Get-WmiObject -ComputerName $computer -Class Win32_LogicalDisk -Filter "DriveType = 3 AND VolumeName !='SWAP space' AND VolumeName !='Pagefile'"
$computer = $computer.toupper()
foreach($disk in $disks)
{
$deviceID = $disk.DeviceID;
$volName = $disk.VolumeName;
[float]$size = $disk.Size;
[float]$freespace = $disk.FreeSpace;
$percentFree = [Math]::Round(($freespace / $size) * 100, 2);
$sizeGB = [Math]::Round($size / 1073741824, 2);
$freeSpaceGB = [Math]::Round($freespace / 1073741824, 2);
$usedSpaceGB = $sizeGB - $freeSpaceGB;
$color = $whiteColor;
# Set background color to Orange if just a warning
if($percentFree -lt $percentWarning)
{
$color = $orangeColor
# Set background color to Orange if space is Critical
if($percentFree -lt $percentCritcal)
{
$color = $redColor
}
# Create table data rows
$dataRow = "
$computer |
$deviceID |
$volName |
$sizeGB |
$usedSpaceGB |
$freeSpaceGB |
$percentFree |
"
Add-Content $diskReport $dataRow;
Write-Host -ForegroundColor DarkYellow "$computer $deviceID percentage free space = $percentFree";
$i++
}
}
}
# Create table at end of report showing legend of colors for the critical and warning
$tableDescription = "
Warning less than 20% free space |
Critical less than 10% free space |
"
Add-Content $diskReport $tableDescription
Add-Content $diskReport ""
# Send Notification if alert $i is greater then 0
if ($i -gt 0)
{
foreach ($user in $users)
{
Write-Host "Sending Email notification to $user"
$smtpServer = ""
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)
$msg = New-Object Net.Mail.MailMessage
$msg.To.Add($user)
#$msg.cc.add("")
$msg.From = ""
$msg.Subject = "Daily DiskSpace Report for $titledate"
$msg.IsBodyHTML = $true
$msg.Body = get-content $diskReport
$smtp.Send($msg)
$body = ""
}
}