Get disk information in SCVMM virtual machine
[CmdletBinding ()]
Param (
[Parameter (Mandatory=$true,HelpMessage='VMM Server Name')]
[Alias ('VMMServer')]
[String] $VMMServerName
[Parameter (HelpMessage='VMM HostGroupName')] [Alias ('GroupName')] [String] $HostGroupName
)
Try {
Connect to VMM ServerWrite-Verbose "Connecting to VMM server..." New-CimSession-ComputerName $VMMServerName-ErrorAction Stop | Out-Null} Catch {Write-Error "Cannot connect to VMMServer: $($Error [0] .E xception.Message) Exiting" Exit} Variables
$filedate = Get-date
$FromEmail = "VMMReport@domain.net"
$ToEmail1 = "ITAdmin@domain.net"
$ToEmail2 = "ITOperator@domain.net"
$tableColor = "WhiteSmoke"
$DiskSpaceUsed = $null
Establish Connection to SMTP server
$smtpServer = "smtp.mail.net"
$smtpCreds = new-object Net.NetworkCredential ("username", "password")
$smtp = new-object Net.Mail.SmtpClient ($smtpServer)
$smtp.UseDefaultCredentials = $false
$smtp.Credentials = $smtpCreds
HTML Style Definition
$report = ""
$report = ""
$report = ""
$report = $report + "TABLE {border-width:2px;border-style: solid;border-color: # C0C0C0; border-collapse: collapse;width: 100%}"
$report = $report + "TH {border-width: 2pxscape padding: 0pxposition bordercopyright style: solid;border-color: # C0C0C0; text-align: left}"
$report = $report + "TD {border-width: 2pxscape padding: 0pxposition bordercopyright style: solid;border-color: # C0C0C0; text-align: left}"
$report = $report + "TD {border-width: 2pxscape padding: 0pxposition bordercopyright style: solid;border-color: # C0C0C0; text-align: left}"
$report = $report + "H1 {font-family:Calibri;}"
$report = $report + "H2 {font-family:Calibri;}"
$report = $report + "Body {font-family:Calibri;}"
$report = $report + ""
$report + = "Get-SCVMVirtualDisk-ScriptVersion: 4.0 | Created By: Charbel Nemnom-CDM MVP | Feedback: https://charbelnemnom.com
"
Report Header
$report = $report + "Virtual Machines and Virtual Hard Disks Report on: $($VMMServerName)"
If ($HostGroupName)
{
Report Title$report = $report + "Data for VMM HostGroup: $($HostGroupName): $($filedate)" Write-Verbose "Get VMM Host Group..." $hostGroups = Get-SCVMHostGroup-Name $HostGroupName-VMMServer $VMMServerNameIf (! $hostGroups) {Write-Error "VMM HostGroup named $($HostGroupName) does not exist... Exiting!" Exit} $hostGroups = $hostGroups.AllChildHostsForeach ($hostGroup in $hostGroups) {$SCVMs + = @ (Get-SCVirtualMachine-VMMServer $VMMServerName-VMHost $HostGroup.Name)}
}
Else
{
$SCVMs + = @ (Get-SCVirtualMachine-VMMServer $VMMServerName)
}
Write-Verbose "Generating Report"
Foreach ($SCVM in $SCVMs)
{
$DiskUsed = $null
Write-Verbose "Checking VM: $SCVM Virtual Hard Disks on $($SCVM.HostName)"
$SCVHDs = Get-SCVirtualMachine $SCVM.Name-VMHost $SCVM.HostName | Get-SCVirtualHardDisk | Select-Object Size
Foreach ($SCVHD in $SCVHDs) {
$DiskUsed + = $SCVHD.Size
}
$DiskSpaceUsed + = $DiskUsed
$report = $report + "TH {background-color:Indigo} TR {background-color:$ ($tableColor)}"
$report = $report + (Get-SCVirtualMachine $SCVM.Name | Select-Object @ {Label= "Host Name"; Expression= {$.VMHost}}, @ {Label= "VM Name"; Expression= {$.Name}}, @ {Label= "ComputerName"; Expression= {$.ComputerName}}, @ {Label= "VM Generation"; Expression= {$.Generation}} | ConvertTo-HTML-as Table-Fragment)
$report = $report + "TH {background-color:Blue} TR {background-color:$ ($tableColor)}"
$report = $report + (Get-SCVirtualMachine $SCVM.Name | Get-SCVirtualDiskDrive | Select-Object @ {Label= "VHD Name"; Expression= {$.VirtualHardDisk}}, @ {Label= "Controller Type"; Expression= {$.BusType}}, Lun | ConvertTo-HTML-as Table-Fragment)
$report = $report + "TH {background-color:DarkGreen} TR {background-color:$ ($tableColor)}"
$report = $report + (Get-SCVirtualMachine $SCVM.Name | Get-SCVirtualHardDisk | Select-Object @ {Label= "VHDType"; Expression= {$.VHDType}}, @ {Label= "VHD Location"; Expression= {$.location}}, @ {Label= "Max Disk Size (GB)"; Expression= {($_ .MaximumSize / 1GB)}}, @ {Label= "Disk Space Used (GB)"; Expression= {"0:N2}"-f ($_ .Size / 1GB)}
@ {Label= "Disk Space Used (%)"; Expression= {[math]:: Round (($.size / 1GB) / ($.MaximumSize / 1GB)) * 100)}}, `
@ {Label= "Free Disk Space (GB)"; Expression= {"{0:N2}"-f (($.MaximumSize / 1GB)-($.size / 1GB))}} | ConvertTo-HTML-as Table-Fragment)
$report = $report + "Total Disk Space Used for VM: $($SCVM.Name) in (GB) is $({{0:N2}}-f ($DiskUsed/1GB))" + "
"
$report = $report + "
"
}
Write-Verbose "Calculating Total Disk Space Used for All Virtual Machines..."
$report = $report + "Total DiskSpaceUsed for All VMs in (GB) is $({{0:N2}}-f ($DiskSpaceUsed/1GB))"
Finalizing Report
Write-Verbose "Finalizing Report"
$report = $report + ""
Send Email
Write-Verbose "Sending Report"
$email = new-object Net.Mail.MailMessage
$email.Priority = [System.Net.Mail.MailPriority]:: High
$email.Subject = "Virtual Machines and Virtual Hard Disks Report: $($filedate)"
$email.From = new-object Net.Mail.MailAddress ($FromEmail)
$email.IsBodyHtml = $true
$email.Body = $report
$email.To.Add ($ToEmail1)
$email.To.Add ($ToEmail2)
$smtp.Send ($email)