Depois de cavar, usei este método:
Primeiro, obtenha todos os discos de todas as máquinas virtuais (meu servidor está em francês, você deve substituir "Disque dur" por "Disco rígido" para sistemas em inglês):
$disks = Get-vm | Get-VMDisk | ? { $_.DriveName -Match "disque dur" }
Em seguida, extraio todos os caminhos VHD:
$vhds = @()
$disks | % { Get-VHDInfo $_.DiskPath } | % { $vhds+= $_.Path }
$vhds = $vhds | select -unique
write-host $vhds.Length -Foreground Yellow
Por fim, executo o código a seguir com a frequência necessária. Eu paro quando o tamanho do array pára de crescer:
$disks | % { Get-VHDInfo $_.DiskPath } | select ParentPath | ? {$_.ParentPath.Length -Gt 0} | % { $vhds+= $_.ParentPath }
$vhds = $vhds | select -unique
write-host $vhds.Length -Foreground Yellow
$vhds | % { Get-VHDInfo $_ } | select ParentPath | ? {$_.ParentPath.Length -Gt 0} | % { $vhds+= $_.ParentPath }
$vhds = $vhds | select -unique
write-host $vhds.Length -Foreground Yellow
#Repeat while Length grows
No final, $vhds
contém todos os drives usados e seus pais. Basta enumerar todos os arquivos .vhd e .avhd e subtrair a matriz $ vhd para encontrar discos inúteis.
Eu sei que isso pode ser reescrito em um bom script, mas isso resolveu meu problema.
Esses cmdlets estão incluídos no Windows Server 2012, são um download separado para sistemas operacionais anteriores .