vSphere-Helper-Report.ps1
Function Report-Datastores{ param( [parameter(Mandatory=$true)][String]$Server, [parameter(Mandatory=$true)][String]$VM, [Parameter(Mandatory=$false)][String]$ReportPath ) $dataStores = Get-AllVmDataStores -Server $Server -VM $VM $freeSpaceGB = @{Name = 'FreeSpaceGB';Expression={'{0:0} GB' -f ($_.FreeSpaceGB)}} $capacityGB = @{Name = 'CapacityGB';Expression={'{0:0} GB' -f ($_.CapacityGB)}} $dataStoresFormatted = @() foreach($dataStore in $dataStores){ $dataStoresFormatted += $dataStore | Select-Object Name,$freeSpaceGB,$capacityGB } if($ReportPath){ $dataStoresFormatted | ConvertTo-Csv -NoTypeInformation | Out-File $ReportPath } if(!$ReportPath){ $dataStoresFormatted } } Function Report-Snapshots{ param( [parameter(Mandatory=$true)][String]$Server, [parameter(Mandatory=$true)][String]$VM, [Parameter(Mandatory=$false)][String]$ReportPath ) $sizeGB = @{Name = 'SizeGB';Expression={'{0:0.0} GB' -f ($_.SizeGB)}} $snapshots = Get-Snapshot -VM $VM | Select-Object VM,Name,$sizeGB if($ReportPath){ $snapshots | ConvertTo-Csv -NoTypeInformation | Out-File $ReportPath } if(!$ReportPath){ $snapshots } } Function Report-Consolidation{ param( [parameter(Mandatory=$true)][String]$Server, [parameter(Mandatory=$true)][String]$VM, [parameter(Mandatory=$false)][String]$ReportPath ) $vmObjects = Get-VM $VM $consolidationVm = $vmObjects | where {$_.ExtensionData.Runtime.consolidationNeeded} | Select-Object Name if($ReportPath){ $consolidationVm | ConvertTo-Csv -NoTypeInformation | Out-File $ReportPath } if(!$ReportPath){ $consolidationVm } } Function Report-VmStats{ param( [parameter(Mandatory=$true)][String]$Server, [parameter(Mandatory=$true)][String]$VM, [Parameter(Mandatory=$true)][ValidateSet('CPU')][String]$Ressource, [Parameter(Mandatory=$true)][ValidateSet('Day','Week','Month')][String]$Intervall, [parameter(Mandatory=$false)][String]$ReportPath ) Switch ($Intervall){ 'Day' {$days=-1;$mins=5;$divider=3000} 'Week' {$days=-7;$mins=30;$divider=18000} 'Month' {$days=-30;$mins=120;$divider=72000} } Switch ($Ressource){ 'CPU' { $cpuStats=Get-Stat -Entity (get-vm $VM -Server $Server) -Stat cpu.ready.summation,cpu.usage.average -start (get-date).adddays($days) -finish (get-date) -interval $mins -instance "" -ea silentlycontinue|group entity $cpuStatsOutput=@() ForEach ($group in $cpuStats) { $temp= "" | select-Object Name, "Avg. CPU Ready-%", "Avg. CPU Ready-ms", "Avg. CPU Utilization" $temp.name=$group.name $temp."Avg. CPU Ready-%"= “{0:n2}” -f (($group.group | Where-Object{ $_.MetricID -eq "cpu.ready.summation"} | Measure-Object value -ave).average/$divider) $temp."Avg. CPU Ready-ms"= “{0:n0}” -f ($group.group | Where-Object{ $_.MetricID -eq "cpu.ready.summation"} | Measure-Object -Property Value -Average).Average $temp."Avg. CPU Utilization"= “{0:n1}” -f ($group.group | Where-Object{ $_.MetricID -eq "cpu.usage.average"} | Measure-Object value -Average).average $cpuStatsOutput+=$temp } if($ReportPath){ $cpuStatsOutput | ConvertTo-Csv -NoTypeInformation | Out-File $ReportPath } if(!$ReportPath){ $cpuStatsOutput } } 'Disk' { ##### } 'Network' { ##### } } } |