Hi
I put together a script that reports on datastores from various code examples and LucD's Get-FriendlyUnit finction.
The output formats the font color to red for Provisioned Space when it's larger than the Capactiy but for some reason in some instances the font is still red even when the Provisoned Space is not larger than the capacity:
This the code that I'm using to change the font color:
If ($Capacity -gt $Provisioned)
{$tableEntry = "<tr><td><font face='Tahoma'>$Name</font></td><td><center><font face='Tahoma'>$Capacity</font></center></td><td><center><font face='Tahoma'>$Provisioned</font></center></td><td><center><font face='Tahoma'>$FreeSpace</font></center></td><td><center></font></center></td></tr>"
Add-Content $fileName $tableEntry
Write-Host $tableEntry}
ElseIf ($Capacity -lt $Provisioned)
{$tableEntry = "<tr><td><font face='Tahoma'>$Name</font></td><td><center><font face='Tahoma'>$Capacity</font></center></td><td><center><font face='Tahoma'color = 'red'>$Provisioned</font></center></td><td><center><font face='Tahoma'>$FreeSpace</font></center></td><td><center></font></center></td></tr>"
Add-Content $fileName $tableEntry
Write-Host $tableEntry}
Here is the full code:
If ((Remove-Item "DS-Report.htm" -ErrorAction SilentlyContinue) -eq $null)
{Remove-Item "DS-Report.htm" -ErrorAction SilentlyContinue}
#Connect to vCenter Server
#---------------------------------------
$vC = "VC1"
Connect-VIServer $vC -WarningAction SilentlyContinue
$date = ( Get-Date ).ToString('yyyy/MM/dd')
$Title = "Datastore Usage Report"
$DC = "Datacenter1"
$DateStamp = get-date -uformat "%Y-%m-%d@%H-%M-%S"
#Create file for new run
New-Item -ItemType file "DS-Report.htm"
$fileName = "DS-Report.htm"
#-------------------------------------------------------------
#HTML Header for Output
Function writeHtmlHeader
{
param($fileName)
Add-Content $fileName "<html>"
Add-Content $fileName "<head>"
Add-Content $fileName "<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>"
Add-Content $fileName '<title>$Title</title>'
Add-Content $fileName '<STYLE TYPE="text/css">'
Add-Content $fileName "<!--"
Add-Content $fileName "td {"
Add-Content $fileName "font-family: Calibri;"
Add-Content $fileName "font-size: 13px;"
Add-Content $fileName "border-top: 1px solid #999999;"
Add-Content $fileName "border-right: 1px solid #999999;"
Add-Content $fileName "border-bottom: 1px solid #999999;"
Add-Content $fileName "border-left: 1px solid #999999;"
Add-Content $fileName "padding-top: 0px;"
Add-Content $fileName "padding-right: 0px;"
Add-Content $fileName "padding-bottom: 0px;"
Add-Content $fileName "padding-left: 0px;"
Add-Content $fileName "}"
Add-Content $fileName "body {"
Add-Content $fileName "margin-left: 5px;"
Add-Content $fileName "margin-top: 5px;"
Add-Content $fileName "margin-right: 0px;"
Add-Content $fileName "margin-bottom: 10px;"
Add-Content $fileName ""
Add-Content $fileName "table {"
Add-Content $fileName "border: thin solid #000000;"
Add-Content $fileName "}"
Add-Content $fileName "-->"
Add-Content $fileName "</style>"
Add-Content $fileName "</head>"
Add-Content $fileName "<body>"
Add-Content $fileName "<table width='60%'>"
Add-Content $fileName "<tr bgcolor='#FFFFFF'>"
Add-Content $fileName "<td colspan='7' height='25' align='center'>"
#Edit Title Below
#Add-Content $fileName "<font face='Tahoma' color='red' size='3'><strong>Critical - </strong></font>"
#Add-Content $fileName "<font face='Tahoma' color='gold' size='3'><strong>Warning - </strong></font>"
Add-Content $fileName "<font face='Tahoma' color='#003399' size='3'><strong>$Title - $Date</strong></font>"
#--------------------------------------------------------------------------------------------------------------------------------------------------------------
#Edit Title Above
Add-Content $fileName "</td>"
Add-Content $fileName "</tr>"
Add-Content $fileName "</table>"
}
#----------------------------------------------------
# Function to write the HTML Header to the file
Function writeTableHeader
{
param($fileName)
Add-Content $fileName "<table width='60%'><tbody>"
Add-Content $fileName "<tr bgcolor=#003399>"
Add-Content $fileName "<td align='center'><font face='Tahoma' color='#FFFFFF'><b>Datastore Name</b></font></td>"
Add-Content $fileName "<td align='center'><font face='Tahoma' color='#FFFFFF'><b>Capacity</b></font></td>"
Add-Content $fileName "<td align='center'><font face='Tahoma' color='#FFFFFF'><b>Provisioned Space</b></font></td>"
Add-Content $fileName "<td align='center'><font face='Tahoma' color='#FFFFFF'><b>Free Space</b></font></td>"
#Add-Content $fileName "<td align='center'><font face='Tahoma' color='#FFFFFF'><b>% Free</b></font></td>"
Add-Content $fileName "</tr>"
}
#--------------------------------------------------------
# Function to write the HTML Footer
Function writeHtmlFooter
{
param($fileName)
Add-Content $fileName "</table>"
Add-Content $fileName "<left><font face='Tahoma' color='#003399' size='2'><weak>Send All Inqueries Regarding this Report to Anthony.G.Flora@IRS.GOV</left>"
Add-Content $fileName "</body>"
Add-Content $fileName "</html>"
}
#--------------------------------------------------------------
#---Function Get-FriendlyUnit----------------------------------
#--------------------------------------------------------------
function Get-FriendlyUnit{
<#
.SYNOPSIS Convert numbers into smaller binary multiples
.DESCRIPTION The function accepts a value and will convert it
into the biggest binary unit available.
.NOTES Author: Luc Dekens
.PARAMETER Value
The value you want to convert.
This number must be positive.
.PARAMETER IEC
A switch to indicate if the function shall return the IEC
unit names, or the more commonly used unit names.
The default is to use the commonly used unit names.
.EXAMPLE
PS> Get-FriendlyUnit -Value 123456
.EXAMPLE
PS> 123456 | Get-FriendlyUnit -IEC
.EXAMPLE
PS> Get-FriendlyUnit -Value 123456,789123, 45678
.EXAMPLE
PS> Get-Datastore -Name DS1 |
Select Name,@{N="Capacity";E={
Get-FriendlyUnit -Value ($_.CapacityMB * 1MB) |
%{"{0,7:f2} {1,2}" -f $_.Value,$_.Unit}}
}
#>
param(
[CmdletBinding()]
[parameter(Mandatory = $true, ValueFromPipeline = $true)]
[double[]]$Value,
[switch]$IEC
)
begin{
$OldUnits = "B","KB","MB","GB","TB","PB","EB","ZB","YB"
$IecUnits = "B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"
if($IEC){$units = $IecUnits}else{$units=$OldUnits}
}
process{
$Value | %{
if($_ -lt 0){
write-Error "Numbers must be positive."
break
}
if($value -gt 0){
$modifier = [math]::Floor([Math]::Log($_,1KB))
}
else{
$modifier = 0
}
New-Object PSObject -Property @{
Value = $_ / [math]::Pow(1KB,$modifier)
Unit = &{if($modifier -lt $units.Count){$units[$modifier]}else{"1KB E{0}" -f $modifier}}
}
}
}
}
#---End of Function Get-FriendlyUnit---------------------------
Function GetDS {
$report = Get-DataCenter $DC | Get-Datastore |
Where-Object {$_.Name -notlike "DataStore1*"} | %{
New-Object PSObject -Property @{
Name = $_.name
Capacity = Get-FriendlyUnit -Value ($_.CapacityMB * 1MB) |
%{"{0,7:f2} {1,2}" -f $_.Value,$_.Unit}
Provisioned = Get-FriendlyUnit -Value ($_.ExtensionData.Summary.Capacity - $_.ExtensionData.Summary.FreeSpace +
$_.ExtensionData.Summary.Uncommitted)|
%{"{0,7:f2} {1,2}" -f $_.Value,$_.Unit}
FreeSpace = Get-FriendlyUnit -Value ($_.FreeSpaceMB * 1MB) |
%{"{0,7:f2} {1,2}" -f $_.Value,$_.Unit}
}
} | Sort-Object -Property Name
$report | %{
writedata $_.Name $_.Capacity $_.Provisioned $_.FreeSpace
}
}
# Function will compile the data passed from the GetDS Function into HTML table format
Function writedata {
param ($Name,$Capacity,$Provisioned,$FreeSpace)
If ($Capacity -gt $Provisioned)
{$tableEntry = "<tr><td><font face='Tahoma'>$Name</font></td><td><center><font face='Tahoma'>$Capacity</font></center></td><td><center><font
face='Tahoma'>$Provisioned</font></center></td><td><center><font face='Tahoma'>$FreeSpace</font></center></td><td><center></font></center></td></tr>"
Add-Content $fileName $tableEntry
Write-Host $tableEntry}
ElseIf ($Capacity -lt $Provisioned)
{$tableEntry = "<tr><td><font face='Tahoma'>$Name</font></td><td><center><font face='Tahoma'>$Capacity</font></center></td><td><center><font
face='Tahoma'color = 'red'>$Provisioned</font></center></td><td><center><font
face='Tahoma'>$FreeSpace</font></center></td><td><center></font></center></td></tr>"
Add-Content $fileName $tableEntry
Write-Host $tableEntry}
<#
ElseIf ($_.PercFree-lt $Warning)
{$tableEntry = "<tr><td><font face='Tahoma'>$Name</font></td><td><center><b><font face='Tahoma'>$Capacity</font></b></center></td><td><center><b><font
face='Tahoma'>$Provisioned</font></b></center></td><td><center><b><font face='Tahoma'>$FreeSpace</font></b></center></td><td><center><b><font
face='Tahoma'color = 'Orange'>$PercFree</font></b></center></td></tr>"
Add-Content $fileName $tableEntry
Write-Host $tableEntry}
#>
}
##Disconnect from vCenter server
################################
Disconnect-VIServer -Confirm:$False
##End of script