Hi,
I'm very new to Powershell but through the help of this forum and the help on the internet I have scraped together a script that will loop through the disks of a set of servers listed in a text document, and give the capacity statistics in html format.
I have two questions. I've tried modifying this to also loop though the individual folders on each disk and give the amount of space used to no avail. does any one have any suggestions?
Secondly, how do I get this to append? all I want to do is set up a scheduled task that runs this report daily. I know I will need to add a date column, but I just want the data to append to the previous set of results.
Thanks for any advice in advance.
# Continue even if there are errors
$ErrorActionPreference = "Continue";
# Set your warning and critical thresholds
$percentWarning = 100;
$percentCritcal = 15;
# REPORT PROPERTIES
# Path to the report
$reportPath = "C:\";
# Report name
$reportName = "DiskSpaceReport_$(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:\serverlist.txt";
$datetime = Get-Date -Format "dd-MM-yyyy_HHmmss";
# Create and write HTML Header of report
$titleDate = get-date -uformat "%d-%m-%Y - %A"
$header = " <html> <head> <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'> <title>DiskSpace Report</title> <STYLE TYPE='text/css'> <!--
td {
font-family: Calibri;
font-size: 12px;
border-top: 1px solid #999999;
border-right: 1px solid #999999;
border-bottom: 1px solid #999999;
border-left: 1px solid #999999;
padding-top: 0px;
padding-right: 0px;
padding-bottom: 0px;
padding-left: 0px;
}
body {
margin-left: 5px;
margin-top: 5px;
margin-right: 0px;
margin-bottom: 10px;
table {
border: thin solid #000000;
}
--> </style> </head> <body> <table width='100%'> <tr bgcolor='#0B6121'> <td colspan='7' height='30' align='center'> <font face='calibri' color='#E0F8F7' size='4'><strong>Daily Disk Utilization Report for $titledate</strong></font> </td> </tr> </table> "
Add-Content $diskReport $header
# Create and write Table header for report
$tableHeader = " <table width='100%'><tbody> <tr bgcolor=#E0F8F7> <td width='10%' align='center'>Server</td> <td width='5%' align='center'>Drive</td> <td width='15%' align='center'>Drive Label</td> <td width='10%' align='center'>Total Capacity(GB)</td> <td width='10%' align='center'>Used Capacity(GB)</td> <td width='10%' align='center'>Free Space(GB)</td> <td width='5%' align='center'>Freespace %</td> <td width='5%' align='center'>RAM %</td><td width='5%' align='center'>CPU %</td></tr> "
Add-Content $diskReport $tableHeader
# Start processing disk space
foreach($computer in $computers)
{
$disks = Get-WmiObject -ComputerName $computer -Class Win32_LogicalDisk -Filter #"DriveType = 3"
$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);
$sizeGB = [Math]::Round($size / 1073741824, 2);
$freeSpaceGB = [Math]::Round($freespace / 1073741824, 2);
$usedSpaceGB = $sizeGB - $freeSpaceGB;
$color = $whiteColor;
# Start processing RAM
$RAM = Get-WmiObject -ComputerName $computer -Class Win32_OperatingSystem
$RAMtotal = $RAM.TotalVisibleMemorySize;
$RAMAvail = $RAM.FreePhysicalMemory;
$RAMpercent = [Math]::Round(($RAMavail / $RAMTotal) * 100);
# 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 = " <tr> <td width='10%'>$computer</td> <td width='5%' align='center'>$deviceID</td> <td width='10%' >$volName</td> <td width='10%' align='center'>$sizeGB</td> <td width='10%' align='center'>$usedSpaceGB</td> <td width='10%' align='center'>$freeSpaceGB</td> <td width='5%' bgcolor=`'$color`' align='center'>$percentFree</td> <td width='5%' align='center'>$RAMpercent</td><td width='5%' align='center'>$CPUpercent</td></tr> "
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 = " </table><br><table width='20%'> <tr bgcolor='White'> <td width='10%' align='center' bgcolor='#FBB917'>No Warning</td> <td width='10%' align='center' bgcolor='#FF0000'>Critical less than 10% free space</td> </tr> "
Add-Content $diskReport $tableDescription
Add-Content $diskReport "</body></html>"