Powershell - сумма виртуальных и процессорных хостов - PullRequest
1 голос
/ 13 марта 2020

Скрипт Powershell для суммирования всех vCPU и сравнения с хост-процессором. Пока у меня есть следующее


$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 неверна. У меня правильные 2 первых столбца

Как мне сопоставить имя хоста? Позже может быть добавим соотношение к ответу? Соотношение $ = 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

1 Ответ

0 голосов
/ 16 марта 2020

Это мой ответ. Не может быть оптимизирован или выглядит хорошо, но это работает. Поэтому после группировки и сопоставления данных с виртуальных машин (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 


...