Hard drive report to pretty html file

2012/02/18 | By | Reply More

This script will get a list of computers and output the hard drive information to a pretty html file. You can also just specify the computer(s) on the command line by entering it  like below

‘.hard drive report to html.ps1’ computer1,computer2,computer3

or use a list of computers jut change file path and name on line 7 to reflect name and path of computer list file using.

Your browser will open with a report that looks similar to below when the script completes.

The file drivereport.htm file will be saved to same location as script.

Download Button5

#requires -version 2.0
#use parameter drive report to html.ps1 computer1,computer2 or a computer list file
#change file path and name of list below to reflect name and path of computer list file using.
#script will open web browser with current report when completed.

Param (
$computers = (Get-Content "C:ScriptsComputers.txt")

$Title="Hard Drive Report to HTML"

#embed a stylesheet in the html header
$head = @"
body { background-color:#FFFFCC;
font-size:12pt; }
td, th { border:1px solid #000033;
border-collapse:collapse; }
th { color:white;
background-color:#000033; }
table, tr, td, th { padding: 0px; margin: 0px }
table { margin-left:10px; }

#define an array for html fragments

#get the drive data
$data=Get-WmiObject -Class Win32_logicaldisk -filter "drivetype=3" -computer $computers

#group data by computername
$groups=$Data | Group-Object -Property SystemName

#this is the graph character

#create html fragments for each computer
#iterate through each group object

ForEach ($computer in $groups) {


#define a collection of drives from the group object

#create an html fragment
$html=$drives | Select @{Name="Drive";Expression={$_.DeviceID}},
@{Name="SizeGB";Expression={$_.Size/1GB -as [int]}},
@{Name="UsedGB";Expression={"{0:N2}" -f (($_.Size - $_.Freespace)/1GB) }},
@{Name="FreeGB";Expression={"{0:N2}" -f ($_.FreeSpace/1GB) }},
$UsedPer= (($_.Size - $_.Freespace)/$_.Size)*100
$UsedGraph=$g * ($UsedPer/2)
$FreeGraph=$g* ((100-$UsedPer)/2)
#I'm using place holders for the < and > characters
"xopenFont color=Redxclose{0}xopen/FontxclosexopenFont Color=Greenxclose{1}xopen/fontxclose" -f $usedGraph,$FreeGraph
}} | ConvertTo-Html -Fragment

#replace the tag place holders. It is a hack but it works.
$html=$html -replace "xopen","<"
$html=$html -replace "xclose",">"

#add to fragments

#insert a return between each computer

} #foreach computer

#add a footer
$footer=("<br><I>Report run {0} by {1}{2}<I>" -f (Get-Date -displayhint date),$env:userdomain,$env:username)

#write the result to a file
ConvertTo-Html -head $head -body $fragments | Out-File drivereport.htm



Category: Uncategorized

Leave a Reply

You must be logged in to post a comment.