2,187
edits
m (→ESX NIC Info: Typo) |
(→Script Extracts: Added "VM's Effective CPU Shares") |
||
Line 425: | Line 425: | ||
} | } | ||
Get-VMDiskUsage (Get-VM "MyVM") | Get-VMDiskUsage (Get-VM "MyVM") | ||
</source> | |||
=== VM's Effective CPU Shares === | |||
Calculates the effective relative CPU shares of VM's contained within resource pools. Can only handle resource pool depth of 1. | |||
<source lang="powershell"> | |||
function Log ($text) { | |||
[int]$duration = (New-TimeSpan $start (Get-Date)).TotalSeconds | |||
Write-Host "$duration secs | $text" | |||
} | |||
$start = Get-Date | |||
Log "Initialising output tables..." | |||
$tSummary = New-Object system.Data.DataTable "Summary Results" | |||
$tSummary.columns.add((New-Object system.Data.DataColumn Name,([string]))) | |||
$tSummary.columns.add((New-Object system.Data.DataColumn CPU_Shares,([int]))) | |||
$tSummary.columns.add((New-Object system.Data.DataColumn VMs,([int]))) | |||
$tSummary.columns.add((New-Object system.Data.DataColumn Weighted,([single]))) | |||
$tDetail = New-Object system.Data.DataTable "Detailed Results" | |||
$tDetail.columns.add((New-Object system.Data.DataColumn Res_Pool,([string]))) | |||
$tDetail.columns.add((New-Object system.Data.DataColumn VM,([string]))) | |||
$tDetail.columns.add((New-Object system.Data.DataColumn Res_CPU_Shares,([int]))) | |||
$tDetail.columns.add((New-Object system.Data.DataColumn VM_CPU_Shares,([int]))) | |||
$tDetail.columns.add((New-Object system.Data.DataColumn Eff_VM_Shares,([single]))) | |||
Log "Getting resource pools..." | |||
$ResPools = Get-ResourcePool | Where {$_.Name -ne "Resources"} | |||
ForEach ($ResPool in $ResPools) { | |||
$rSummary = $tSummary.NewRow() | |||
Log ("Analysing " + $ResPool.Name + "...") | |||
$rSummary.Name = $ResPool.Name | |||
$rSummary.CPU_Shares = $ResPool.NumCpuShares | |||
$VMs = Get-VM -location $ResPool | Where {$_.PowerState -eq "PoweredOn"} | |||
$rSummary.VMs = $VMs.Count | |||
$rSummary.Weighted = $rSummary.CPU_Shares / $rSummary.VMs | |||
$tSummary.Rows.Add($rSummary) | |||
# Get each VM's shares | |||
$totShares = 0 | |||
$VMshares = @{} | |||
ForEach ($vm in $VMs) { | |||
$VMShares[$vm.Name] = ($vm | Get-VMResourceConfiguration).NumCpuShares | |||
$totShares += $VMShares[$vm.Name] | |||
} | |||
# Work out each VM's proportional CPU share | |||
ForEach ($vm in $VMs) { | |||
$rDetail = $tDetail.NewRow() | |||
$rDetail.Res_Pool = $ResPool.Name | |||
$rDetail.VM = $vm.Name | |||
$rDetail.Res_CPU_Shares = $ResPool.NumCpuShares | |||
$rDetail.VM_CPU_Shares = $VMShares[$vm.Name] | |||
$rDetail.Eff_VM_Shares = $ResPool.NumCpuShares * ($rDetail.VM_CPU_Shares / $totShares) | |||
$tDetail.Rows.Add($rDetail) | |||
} | |||
} | |||
Log "Done! Writing results out..." | |||
$tSummary | Export-Csv -path ESX-ResPoolInfo-Summary.csv | |||
$tDetail | Export-Csv -path ESX-ResPoolInfo-Detail.csv | |||
$tSummary | |||
</source> | </source> | ||