Windows 2012 R2脚本访问物理磁盘的可用空间?

有没有办法在Windows Server 2012上访问组成存储池的物理驱动器的可用空间?

我刚刚遇到了空间不足的问题,可以通过GUI看到每个驱动器上分配的空间,但似乎找不到在Powershell(或vbscript / wmi或cmd)中编写脚本的方法。 ,因为我想生成定期报告。

Get-PhysicalDisk cmdlet具有计算可用空间所需的信息。 具体而言,它返回一个包含以下属性的对象types:

  • AllocatedSize (例如已用空间)
  • Size (例如容量)

有了这些知识,我们可以做一个基本的单行程来返回系统上所有物理驱动器的空闲空间(忽略哪些是虚拟磁盘或存储池成员的时间:

 Get-PhysicalDisk | Select FriendlyName,Size,@{L='Free Space';E={$_.Size-$_.AllocatedSize}} 

但是,所有返回的值都是字节,在当今的大型磁盘上并不是非常有用。 您可能想要将结果格式化为GB或TB,如下所示:

 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' 

所以现在我们已经有了一个可以很好地列出系统中所有物理磁盘的容量和可用空间的命令。 但是我们只需要组成特定存储池的物理磁盘。 事实certificate,使用Get-StoragePool和PowerShell原生对象pipe道系统非常简单:

 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' 

您还可以使用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'