如何用 Powershell 总结 Cores?

How to sum up Cores with Powershell?

我在 Azure 中有一堆虚拟机,想计算核心总数。

预期行为(例如):

?> Get-TotalCores
?> 200

这就是代码:

function Get-TotalCores {

    $TotalCores = $null
    $TotalWorkers = Get-AzVM -ResourceGroupName $ResourceGroup -Status | Where-Object { ( `
                $_.Name -notlike $MasterVM -and `
                $_.ProvisioningState -eq "Succeeded" ) }

    foreach ($Worker in $TotalWorkers) {
        $Size = (Get-AzVMSize -ResourceGroupName $ResourceGroup -VMName $Worker.Name).HardwareProfile.VmSize
        $TotalCores += (Get-AzVMSize -location $Location | Where-Object { $_.Name -eq $Size }).NumberOfCores
    }
    return $TotalCores
}

但是我的 foreach 循环无法获得正确的 SKU 尺寸。看来,

$Size = (Get-AzVMSize -ResourceGroupName $ResourceGroup -VMName $Worker.Name).HardwareProfile.VmSize

无法获取正确的 SKU。

要获取特定 VM 的大小,您需要使用 Get-AzVM 而不是 Get-AzVMSize

$Size = (Get-AzVM -ResourceGroupName "xxx" -VMName "xxx").HardwareProfile.VmSize

我已经这样解决了

$TotalCores = $null
$ResourceGroup = "myawesomerg"
$TotalWorkers = (Get-AzVM -ResourceGroupName $ResourceGroup -Status | Where-Object { ( 
                $_.ProvisioningState -eq "Succeeded" ) })

foreach ($Worker in $TotalWorkers) {
    $VMSize = (Get-AzVM -ResourceGroupName $ResourceGroup -Name $Worker.Name).HardwareProfile.VmSize
    $Cores = (Get-AzVMSize -location $Location | Where-Object { $_.name -eq $VMSize }).NumberOfCores
    $TotalCores += $Cores
}