O cmdlet Get-PhysicalDisk
tem a informação que você precisa calcular o espaço livre. Especificamente, ele retorna um tipo de objeto que contém as seguintes propriedades:
-
AllocatedSize
(por exemplo, espaço usado) -
Size
(por exemplo, capacidade)
Munido desse conhecimento, podemos fazer um one-liner básico para retornar o espaço livre de todas as unidades físicas no sistema (ignorando no momento quais são os membros de um disco virtual ou pool de armazenamento:
Get-PhysicalDisk | Select FriendlyName,Size,@{L='Free Space';E={$_.Size-$_.AllocatedSize}}
Mas todos os valores retornados estão em Bytes, o que não é muito útil nos grandes discos de hoje. Você provavelmente deseja formatar os resultados para GB ou TB da seguinte forma:
Get-PhysicalDisk | Select FriendlyName,@{L='Capacity';E={"{0:N2}GB" -f ($_.Size/1GB)}},@{L='Free Space';E={"{0:N2}GB" -f (($_.Size-$_.AllocatedSize)/1GB)}} | Sort 'Free Space'
Get-PhysicalDisk | Select FriendlyName,@{L='Capacity';E={"{0:N2}TB" -f ($_.Size/1TB)}},@{L='Free Space';E={"{0:N2}TB" -f (($_.Size-$_.AllocatedSize)/1TB)}} | Sort 'Free Space'
Portanto, agora temos um comando que listará bem a capacidade e o espaço livre de todos os discos físicos no sistema. Mas queremos apenas os discos físicos que compõem um pool de armazenamento específico. Acontece que isso é muito fácil com Get-StoragePool
e o objeto nativo do PowerShell:
Get-StoragePool 'MyPool' | Get-PhysicalDisk | Select FriendlyName,@{L='Capacity';E={"{0:N2}TB" -f ($_.Size/1TB)}},@{L='Free Space';E={"{0:N2}TB" -f (($_.Size-$_.AllocatedSize)/1TB)}} | Sort 'Free Space'
Você também consulta os discos associados a um disco virtual com Get-VirtualDisk
:
Get-VirtualDisk 'MyVD' | Get-PhysicalDisk | Select FriendlyName,@{L='Capacity';E={"{0:N2}TB" -f ($_.Size/1TB)}},@{L='Free Space';E={"{0:N2}TB" -f (($_.Size-$_.AllocatedSize)/1TB)}} | Sort 'Free Space'