Powershell脚本总结所有vCPU并与主机CPU进行比较。我到目前为止有以下内容
$hostGroups = Get-SCVMMServer -ComputerName "NAME" | Get-SCVMHostGroup | Where-Object { $_.Name -Like "*SOMETHING*"}
$hostGroups = $hostGroups.AllChildHosts
Foreach ($hostGroup in $hostGroups)
{
$SCVMs += @(Get-SCVirtualMachine -VMHost $HostGroup.Name)
}
Foreach ($SCVM in $SCVMs)
{
$CPUCount = $null
$HostLogicalProcessorCount = Get-SCVMHost -ComputerName $SCVM.HostName | Select-Object LogicalProcessorCount
$answer = $SCVMs |
Select-Object CPUCount, HostName |
Group-Object HostName |
Select-Object @{n='HostName';e={$_.Group | Select -Expand HostName -First 1}},
@{n='CPUCount';e={($_.Group | Measure-Object CPUCount -Sum).Sum}},
@{n="HostLogicalProcessorCount";e={$HostLogicalProcessorCount}}
}
$answer | Format-Table -AutoSize
$answer > answer.txt
这是本意,但是$ HostLogicalProcessorCount的部分当然是错误的。我的前两列是正确的
如何匹配主机名?以后也许将比率添加到答案中? $ ratio = CPUCount / HostLogicalProcessorCount
预期结果是
HostName CPUCount HostLogicalProcessorCount
-------- -------- -------------------------
BLA02SAM4N.DOMAIN.local 128 128
BLA02SAM9N.DOMAIN.local 101 64
BLA02SAM7N.DOMAIN.local 103 64
BLA02SAM1N.DOMAIN.local 105 64
BLA02SAM3N.DOMAIN.lAocal 126 48
BLA02SAM2N.DOMAIN.local 86 64
BLA02SAM8N.DOMAIN.local 115 32
BLA02SAM6N.DOMAIN.local 124 64
BLA02SAM5N.DOMAIN.local 101 128
ALB02SAM7N.DOMAIN.local 199 64
ALB02SAM4N.DOMAIN.local 205 256
ALB02SAM3N.DOMAIN.local 162 64
ALB02SAM5N.DOMAIN.local 171 64
ALB02SAM8N.DOMAIN.local 172 64
ALB02SAM2N.DOMAIN.local 213 64
ALB02SAM9N.DOMAIN.local 172 128
ALB02SAM1N.DOMAIN.local 186 64
ALB02SAM6N.DOMAIN.local 171 128
这是我的答案。可能不会被优化或看起来不错,但是它可以工作。因此,在对来自VM(Get-SCVirtualMachine)的数据进行分组和汇总之后,我正在使用Get-SCVMHost从相关主机中获取数据。
$hostGroups = Get-SCVMMServer -ComputerName "au05scvmm" | Get-SCVMHostGroup | Where-Object { $_.Name -Like "*SOMETHING*"}
$hostGroups = $hostGroups.AllChildHosts
Foreach ($hostGroup in $hostGroups)
{
$SCVMs += @(Get-SCVirtualMachine -VMHost $HostGroup.Name)
}
$GroupbyArray = $SCVMs |
Select-Object CPUCount, HostName |
Group-Object HostName | select-Object @{n='HostName';e={$_.Group | Select -Expand HostName -First 1}},
@{n='CPUCount';e={($_.Group | Measure-Object CPUCount -Sum).Sum}}
$answer = @()
Foreach($element in $GroupbyArray)
{
$answer = $answer +
(Get-SCVMHost -ComputerName $element.HostName | Select-Object `
@{n="HostName";e={$element.HostName}}, `
@{n="pCPU_vCPU_Ratio"; e={[math]::Round($element.CPUCount/$_.LogicalProcessorCount,1)}}, `
@{n="Memory_provisoned_Ratio"; e={[math]::Round(($_.AvailableMemory/$_.TotalMemory)*100,6) -as [decimal]}}, `
@{n="LogicalProcessorCount";e={$_.LogicalProcessorCount}}, `
@{n="PhysicalCPUCount";e={$_.PhysicalCPUCount}}, `
@{n="CoresPerCPU";e={$_.CoresPerCPU}}, `
@{n="CPUCount";e={$element.CPUCount}}, `
@{n="Host_TotalMemory";e={$_.TotalMemory}}, `
@{n="Host_AvailableMemory";e={$_.AvailableMemory}}
)
}
$answer | ConvertTo-Json