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

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

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

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

答案1

Get-PhysicalDiskcmdlet 包含计算可用空间所需的信息。具体来说,它返回包含以下属性的对象类型:

  • 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'

现在我们有了一个命令,可以很好地列出系统上所有物理磁盘的容量和可用空间。但我们只需要组成特定存储池的物理磁盘。事实证明,这很容易Get-StoragePool和 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'

您还可以查询与虚拟磁盘关联的磁盘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'

相关内容