############################################################################# # # 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 = " " 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 = " " 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 = "
Server Drive Drive Label Total Capacity(GB) Used Capacity(GB) Free Space(GB) Freespace %
$computer $deviceID $volName $sizeGB $usedSpaceGB $freeSpaceGB $percentFree

" 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 = "" } }
Warning less than 20% free space Critical less than 10% free space