Powershell-VM CPU和主机CPU的总和

问题描述 投票:1回答:1

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
powershell sum aggregate
1个回答
0
投票

这是我的答案。可能不会被优化或看起来不错,但是它可以工作。因此,在对来自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 


© www.soinside.com 2019 - 2024. All rights reserved.