Powershell—虚拟机CPU和主机CPU的总和

Powershell—虚拟机CPU和主机CPU的总和,powershell,sum,aggregate,Powershell,Sum,Aggregate,Powershell脚本,用于汇总所有VCPU并与主机CPU进行比较。 到目前为止,我有以下几点 $hostGroups = Get-SCVMMServer -ComputerName "NAME" | Get-SCVMHostGroup | Where-Object { $_.Name -Like "*SOMETHING*"} $hostGroups = $hostGroups.AllChildHosts Foreach ($hostGroup in $ho

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的部分是错误的。 我有前两列是正确的

如何匹配主机名? 以后可能会在答案中添加比例$比率=CPUCount/HostLogicalProcessorCount

预期结果是

HostName-CPUCount-HostLogicalProcessorCount
--------                   -------- -------------------------
BLA02SAM4N.DOMAIN.local 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
这是我的答案。可能没有得到优化或看起来不好,但它是有效的。 因此,在对来自VMs的数据进行分组和sumarrizing(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 



这是我的答案。可能没有得到优化或看起来不好,但它是有效的。 因此,在对来自VMs的数据进行分组和sumarrizing(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 



由于您是根据主机名进行分组的,因此组的Name属性将具有该名称,因此您应该能够执行
@{n='HostName';e={$\u.Name}
我不需要主机名,我已经有了它。我想要其他与主机相关的属性。如何匹配主机名,例如BLA02SAM4N.DOMAIN.local,并获取与主机相关的属性?并将其添加到我的答案中。感谢您在主机名上分组后,组的Name属性将具有该名称,因此您应该能够执行
@{n='HostName';e={$\u.Name}
我不需要主机名,我已经有了它。我想要其他与主机相关的属性。如何匹配主机名,例如BLA02SAM4N.DOMAIN.local,并获取与主机相关的属性?并将其添加到我的答案中。谢谢