如何将WMI查询输出的磁盘大小转换为GB单位显示?
如何将WMI获取的磁盘大小格式化为GB单位?
嗨,我来帮你搞定这个问题!你已经用Get-WMIObject筛选出了本地磁盘(DriveType=3代表固定磁盘),现在要把字节数的大小转成GB其实很简单,主要是利用PowerShell的内置常量和计算能力就行。
Win32_LogicalDisk返回的Size和FreeSpace属性都是以字节为单位的,我们只需要把它们除以PowerShell内置的1GB常量(它等价于102410241024字节),再用[math]::Round()来控制小数位数,就能得到美观的GB格式输出了。
给你一个完整的脚本示例:
# 可以把$Computer换成你要查询的远程计算机名 $Computer = $env:COMPUTERNAME Get-WMIObject -ComputerName $Computer -Class Win32_LogicalDisk | Where-Object {$_.DriveType -eq 3} | Select-Object DeviceID, @{Name='Size(GB)'; Expression={[math]::Round($_.Size / 1GB, 2)}}, @{Name='FreeSpace(GB)'; Expression={[math]::Round($_.FreeSpace / 1GB, 2)}}, VolumeName
关键部分解释:
- 用
Select-Object创建自定义属性:Name是最终显示的列名,Expression里写具体的计算逻辑 [math]::Round($_.Size / 1GB, 2):把字节数转成GB后保留2位小数,你可以把数字2改成其他值来调整精度(比如1位或者不保留小数)
另外提一句,如果你用的是PowerShell 3.0及以上版本,更推荐用Get-CimInstance代替Get-WMIObject——它是WMI的现代替代方案,性能更好,语法几乎一致:
$Computer = $env:COMPUTERNAME Get-CimInstance -ComputerName $Computer -ClassName Win32_LogicalDisk | Where-Object {$_.DriveType -eq 3} | Select-Object DeviceID, @{Name='Size(GB)'; Expression={[math]::Round($_.Size / 1GB, 2)}}, @{Name='FreeSpace(GB)'; Expression={[math]::Round($_.FreeSpace / 1GB, 2)}}, VolumeName
如果想让输出更整齐,还可以在最后加上| Format-Table -AutoSize,让表格列自适应宽度,可读性更强。
内容的提问来源于stack exchange,提问作者Luciferation
相关产品推荐
相关产品推荐

