如何使用 powershell 获取特定数据存储超过 25% 已用 space 的 vmware 虚拟机列表?

How to get vmware vm list which has more than 25% of used space of the particular datastore using powershell?

我需要获取 vm 列表,其中包含特定数据存储中已用 space 的 25%。

$vmdatastore = Get-Datastore "XXXXX-LUN001" | select Name, @{N = Capacity";E={[math]::Round($_.ExtensionData.Summary.Capacity / 1GB, 2)}},@{N="FreeSpace";E={[math]::Round($_.ExtensionData.Summary.FreeSpace/1GB, 2)}}, @{N="PercentageFreeSpace";E={[math]::Round(($_.FreeSpaceGB)  /($_.CapacityGB) * 100, 2)}} 

$vmlists=Get-Datastore "XXXXX-LUN001" | Get-VM | Select name, @{N="DSName";E={$vmdatastore.Name}},usedspacegb,  provisionedspacegb 

帮我获取 vm 列表,该列表在特定数据存储中使用了 25% space.. 非常感谢

$gt25 = $vmdatastore | ?{$_.PercentageFreeSpace -gt 25}
Get-Datastore -name $gt25 | Get-VM

评论后...怎么样

 $vmdatastore =  Get-Datastore "xxxxyourdatastorexxx" | select Name, @{N = 
 "Capacity";E={[math]::Round($_.ExtensionData.Summ
  ary.Capacity / 1GB, 2)}}, @{N = "QuarterOfThat";E= 
 {[math]::Round($_.ExtensionData.Summary.Capacity / 1GB / 4, 2)}}

 $vmlist = Get-Datastore ABN_NP_CORE2 | get-vm | ? {$_.usedspaceGB -gt 
 $vmdatastore.QuarterOfThat}


 $vmlist.usedspaceGB

不太确定,如果那是您想要的,但如果您想要一个 VM 列表,这些 VM 总共占用数据存储容量的至少 25%,则此方法可能会有所帮助:

$ds = Get-Datastore "XXXXX-LUN001"
$dsVMs = Get-VM -Datastore $ds
$vmUsedSpace = 0
$vmMigrationCandidates = @()
$dsCapacityThreshold = $ds.CapacityGB / 4

while ($vmUsedSpace -le $dsCapacityThreshold -and $dsVMs.Count -gt 0)
{
    $vm,$dsVMs = $dsVMs
    $vmUsedSpace += $vm.UsedSpaceGB
    $vmMigrationCandidates += $vm
}

$vmMigrationCandidates 将保存一个 VM 列表,这些 VM 总共使用至少 25% 的数据存储总容量。 (或者此数据存储上的所有虚拟机,如果它们一起没有达到阈值。)

如果您更愿意迁移几个 "big" 个虚拟机而不是多个 "small" 个虚拟机,您仍然需要决定。还要考虑到,您可能必须考虑 DRS 主机或虚拟机亲和性规则。