当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何使用 PowerShell 获取可用磁盘空间 [教程]

作者:精品下载站 日期:2024-12-14 13:06:34 浏览:14 分类:玩电脑

如何使用 PowerShell 获取可用磁盘空间 [教程]


如果您使用 PowerShell 来获取 Windows 计算机上的可用磁盘空间,那么您来对地方了。在本教程中,您将学习如何使用 PowerShell 获取可用磁盘空间并监控磁盘使用情况。

先决条件

本教程假设您使用的是安装了 Windows PowerShell v5.1 的 Windows 10 或更高版本的计算机。 PowerShell 6+ 很可能也能正常工作。还假设您处于 Active Directory 环境中。如果没有,请务必了解 New-CimSession cmdlet 上的 Credential 属性

查询CIM

每条Windows系统信息都位于CIM/WMI中。 WMI 数据存储包含数千个 Windows 系统的信息;磁盘和存储信息只是其中之一。

CIM 数据存储区分为各种。 WMI 将有关磁盘的信息存储在 Win32_LogicalDisk 类中。 Win32_LogicalDisk 类包含磁盘信息,例如磁盘名称、总大小、可用空间等。要使用 PowerShell 查询此类,您必须使用 Get-CimInstance cmdlet 创建一个 CIM 实例。

仅使用 Get-CimInstance 指定 ClassName 参数是查询类的最简单方法。

Get-CimInstance -ClassName Win32_LogicalDisk

Get-CimInstance 将为找到的每个存储卷返回一个 PowerShell 对象,如下所示。

[玩转系统] 如何使用 PowerShell 获取可用磁盘空间 [教程]

请注意,Get-CimInstance 返回附加到返回的每个存储卷对象的 FreeSpace 属性。 FreeSpace 属性是您需要使用的。

限制 CIM 输出磁盘名称和可用空间

假设您不需要 Get-CimInstance 返回的所有信息,您现在需要限制查看的内容。假设您只想查看驱动器号名称 (DeviceID) 和可用空间量 (FreeSpace)。为此,您可以使用 Select-Object 修剪输出。

Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,FreeSpace

[玩转系统] 如何使用 PowerShell 获取可用磁盘空间 [教程]

您现在有了一份关于可用磁盘空间的漂亮小报告。

将磁盘空间从字节转换为千兆字节

尽管您现在有一个命令来查找可用磁盘空间,但有些东西看起来不太对劲。您可能会发现 FreeSpace 不是在 GB 中定义的;它实际上是以字节为单位定义的。无论如何,谁需要这种级别的粒度?让我们将字节转换为更易读的千兆字节。

要执行转换,您必须首先将字节除以1GB。例如,在本例中,您知道 C: 磁盘包含 210155110400 字节的可用磁盘空间。要将字节转换为千兆字节,您可以将该数字除以 1GB,如下所示。

210155110400 / 1GB

您将看到 C: 驱动器总共 195GB,并且有一些变化。

[玩转系统] 如何使用 PowerShell 获取可用磁盘空间 [教程]

你越来越近了。您可能正在寻找一个不错的整数,但没有通过转换得到它。没有汗!您需要做最后一件事,即将千兆字节四舍五入到最接近的整数。

将小数“四舍五入”到最接近的整数的最简单方法之一是将它们转换为如下所示的整数。您会看到该数字已四舍五入。此方法比使用 Round() 方法更快。

[int](210155110400 / 1GB)

美化磁盘空间输出

现在您已经知道如何将可用空间字节转换为千兆字节,并将此技术合并到您的脚本中。实现这一目标的最佳方法之一是使用计算属性。计算属性允许您针对属性值运行代码来更改它们。

计算属性允许您将属性值定义为脚本块,它本质上是一个可移植的代码单元。

到目前为止,您的代码仅返回以字节显示的磁盘标签 (DeviceID) 和可用空间 (FreeSpace),如下所示。

Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,FreeSpace

现在,仅这一次构建您自己的 FreeSpace 属性,它以 GB 为单位。

Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,@{'Name' = 'FreeSpace (GB)'; Expression= { [int]($_.FreeSpace / 1GB) }}

[玩转系统] 如何使用 PowerShell 获取可用磁盘空间 [教程]

这样好多了!您现在已经得到了您正在寻找的信息。

奖励:对可用空间进行分组

在上面的示例中,您构建了一个命令来返回每个卷的可用空间。也许您不关心每个卷,而宁愿从计算机上的所有卷中获取可用磁盘空间。

也许您正在构建一个可以同时处理多台机器的脚本,并且您希望输出如下所示:

ServerName FreeSpace
---------- ---------
SRV1       195
SRV2       45

在这种情况下,您需要对上一示例中返回的所有行进行分组,并使用 Measure-Object cmdlet 对所有 FreeSpace 行进行求和。此 cmdlet 接受多个对象的输入,读取属性,然后执行某些操作。

Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,@{'Name' = 'FreeSpace (GB)'; Expression= { [int]($_.FreeSpace / 1GB) }} | Measure-Object -Property 'FreeSpace (GB)' -Sum

现在,您可以看到从 Measure-Object 返回的 Sum 属性是 1998,这是该计算机拥有的可用空间总量(以 GB 为单位)。

[玩转系统] 如何使用 PowerShell 获取可用磁盘空间 [教程]

最后,删除所有不需要的属性并仅返回可用空间总量。

(Get-CimInstance -ClassName Win32_LogicalDisk | Select-Object -Property DeviceID,@{'Name' = 'FreeSpace (GB)'; Expression= { [int]($_.FreeSpace / 1GB) }} | Measure-Object -Property 'FreeSpace (GB)' -Sum).Sum

结论

使用 PowerShell 查找磁盘使用情况和磁盘可用空间只需一行,但您必须首先知道如何创建它!在本教程中,您学习了如何使用 PowerShell 获取可用磁盘空间并根据您的喜好格式化输出。

改进此代码。看看您是否可以构建一个脚本来同时在许多服务器上运行此代码!

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯