Added VMsStatusReport file (#465)
* Added VMsStatusReport file * fixed typo and added space before and after | * Modified script to fuction with VIServerFilePath and OutPath parameters * Refined help section * Changed name from VMsStatusReport.ps1 to Get-VMSnapshotReport.ps1 * help documentation refined * commit * fomating corrections using prettier extension * cmdletbinding correction * added example and fixed parameter issue
This commit is contained in:
171
Scripts/Get-VMSnapshotReport.ps1
Normal file
171
Scripts/Get-VMSnapshotReport.ps1
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
<#
|
||||||
|
.SYNOPSIS
|
||||||
|
Creates HTML report of snapshots , Poweroff and PoweredOn VMS
|
||||||
|
|
||||||
|
.DESCRIPTION
|
||||||
|
The purpose of the script is to get a list of all VM Snaphots, Powered On VMs and Powered Off VMs. Utilises css and converts to a good looking html report. HTML format highlights large/old snapshots. This can be scheduled via taks scheduler and emailed to administrators or uplaoded to an IIS web location.
|
||||||
|
|
||||||
|
.NOTES
|
||||||
|
Script name: VMsStatusReport.ps1
|
||||||
|
Created on: 20/06/2021
|
||||||
|
Author: Jimit Gohel, @PsJimKG
|
||||||
|
Dependencies: Along with PowerCli, this script also requires Don Jones EnhancedHTML2 module. https://www.powershellgallery.com/packages/EnhancedHTML2/2.1.0.1
|
||||||
|
===Tested Against Environment====
|
||||||
|
vSphere Version: 6.7
|
||||||
|
PowerCLI Version: PowerCLI 11.5.0
|
||||||
|
PowerShell Version: 5.1
|
||||||
|
OS Version: Windows 10
|
||||||
|
|
||||||
|
.INPUTS
|
||||||
|
VIServerFilePath
|
||||||
|
|
||||||
|
.OUTPUTS
|
||||||
|
html file named VMStatusReport.html
|
||||||
|
|
||||||
|
.PARAMETER VIServerFilePath
|
||||||
|
csv file path to list of viservers
|
||||||
|
|
||||||
|
.PARAMETER Outpath
|
||||||
|
Output path to html report.
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
PS> Get-VMSnapshotReport -VIServerFilePath "C:\Temp\viservers.csv" -OutPath "C:\MyReports"
|
||||||
|
|
||||||
|
.EXAMPLE
|
||||||
|
PS> Get-VMSnapshotReport "C:\temp\viserverslist.csv" C:\VMReports"
|
||||||
|
|
||||||
|
#>
|
||||||
|
function Get-VMSnapshotReport {
|
||||||
|
|
||||||
|
[CmdletBinding()]
|
||||||
|
Param(
|
||||||
|
[Parameter(Mandatory = $True, Position = 1, ValueFromPipeline = $True)]
|
||||||
|
[ValidateNotNullOrEmpty()]
|
||||||
|
[string]$VIServerFilePath,
|
||||||
|
|
||||||
|
[Parameter(Mandatory = $True, Position = 2)]
|
||||||
|
[string]$OutPath
|
||||||
|
)
|
||||||
|
# path to CSV list of viservers
|
||||||
|
|
||||||
|
$viservers = (Get-Content "$VIServerFilePath")
|
||||||
|
|
||||||
|
Connect-VIServer $viservers
|
||||||
|
|
||||||
|
$CSS2 = "body {
|
||||||
|
color: #333333;
|
||||||
|
font-family: Tahoma;
|
||||||
|
font-size: 10pt;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
border-top: 1px solid #666666;
|
||||||
|
}
|
||||||
|
th {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #eeeeee;
|
||||||
|
background-color: #333333;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.odd {
|
||||||
|
background-color: #ffffff;
|
||||||
|
}
|
||||||
|
.even {
|
||||||
|
background-color: #bfbfbf;
|
||||||
|
}
|
||||||
|
|
||||||
|
.paginate_enabled_next,
|
||||||
|
.paginate_enabled_previous {
|
||||||
|
cursor: pointer;
|
||||||
|
border: 1px solid #222222;
|
||||||
|
background-color: #dddddd;
|
||||||
|
padding: 2px;
|
||||||
|
margin: 4px;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
.paginate_disabled_previous,
|
||||||
|
.paginate_disabled_next {
|
||||||
|
color: #666666;
|
||||||
|
cursor: pointer;
|
||||||
|
background-color: #dddddd;
|
||||||
|
padding: 2px;
|
||||||
|
margin: 4px;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
.dataTables_info {
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
.sectionheader {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.sectionheader:hover {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
.grid {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.smallgrid {
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
.red {
|
||||||
|
color: #ff3333;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.green {
|
||||||
|
background-color: #00cc44;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
"
|
||||||
|
|
||||||
|
#Capturing VMs data
|
||||||
|
$vms = Get-VM
|
||||||
|
|
||||||
|
#reportgeneratedtag
|
||||||
|
$reportgeneratedtag = (Get-Date -Format "dd MMMM yyyy HH:mm:ss")
|
||||||
|
|
||||||
|
#Capturing data for snapshots
|
||||||
|
|
||||||
|
$paramsSnapshotFragment = @{'As' = 'Table';
|
||||||
|
'PreContent' = '<h2>VM Snapshots</h2>';
|
||||||
|
'MakeTableDynamic' = $true;
|
||||||
|
'TableCssClass' = 'grid';
|
||||||
|
'Properties' = 'VM', @{Name = 'SnapshotName'; Expression = { $_.Name } }, 'Created', @{Name = 'AgeDays'; Expression = { ((New-TimeSpan -Start $_.Created -End (get-date)).Days) }; css = { if (((New-TimeSpan -Start $_.Created -End (get-date)).Days) -gt 120) { 'red' } } }, 'Description', @{name = 'SizeGB'; expression = { [math]::Round($_.sizegb, 2) }; css = { if ($_.sizegb -gt 100) { 'red' } } }, 'PowerState', 'IsCurrent', 'ParentSnapshot', 'Children'
|
||||||
|
}
|
||||||
|
$snapshots = $vms | Get-Snapshot | ConvertTo-EnhancedHTMLFragment @paramsSnapshotFragment
|
||||||
|
|
||||||
|
#PoweredOff
|
||||||
|
|
||||||
|
$paramsPoweredoff = @{'As' = 'Table';
|
||||||
|
'PreContent' = '<h2>Powered Off VMs</h2>';
|
||||||
|
'MakeTableDynamic' = $true;
|
||||||
|
'TableCssClass' = 'grid';
|
||||||
|
'Properties' = 'Name', 'PowerState', 'Notes' , 'Folder'
|
||||||
|
}
|
||||||
|
$poweredoffvms = $vms | Where-Object { $_.PowerState -ne 'PoweredOn' } | ConvertTo-EnhancedHTMLFragment @paramsPoweredoff
|
||||||
|
|
||||||
|
#PoweredOn
|
||||||
|
|
||||||
|
$paramsPoweredon = @{'As' = 'Table';
|
||||||
|
'PreContent' = '<h2>Powered On VMs</h2>';
|
||||||
|
'MakeTableDynamic' = $true;
|
||||||
|
'TableCssClass' = 'grid';
|
||||||
|
'Properties' = 'Name', 'PowerState', 'Notes' , 'Folder'
|
||||||
|
}
|
||||||
|
$poweredonvms = $vms | Where-Object { $_.PowerState -eq 'PoweredOn' } | ConvertTo-EnhancedHTMLFragment @paramsPoweredon
|
||||||
|
|
||||||
|
|
||||||
|
# Finalising main html report
|
||||||
|
$paramsMainHTML = @{
|
||||||
|
'HTMLFragments' = $reportgeneratedtag, $snapshots, $poweredoffvms, $poweredonvms
|
||||||
|
'CssStyleSheet' = $CSS2;
|
||||||
|
'Title' = 'VM Status Report';
|
||||||
|
'PreContent' = "<h1>VM Status Report</h1>"
|
||||||
|
}
|
||||||
|
ConvertTo-EnhancedHTML @paramsMainHTML | Out-File "$OutPath\VMStatusReport.html" -Encoding utf8
|
||||||
|
|
||||||
|
|
||||||
|
Disconnect-VIServer -Server $viservers -Force -Confirm:$false
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user