如何为PowerShell表格结果添加单位文本?是否可使用foreach循环?
在PowerShell表格结果中添加单位(MHz/GB)的实现方法
当然可以用foreach循环实现,不过其实还有更省心的方式——直接在Format-Table的计算属性里拼接单位就行,既能搞定多结果显示,还不用额外写循环逻辑。下面针对你给出的两个场景一步步说明:
一、物理内存查询:给Speed和Capacity添加单位
你的原始代码已经用了计算属性,只需要在计算值后面直接拼接单位字符串就可以,完全不需要foreach循环,多内存条的情况也能自动给每一行加上正确单位:
Get-WmiObject Win32_PhysicalMemory | Format-Table Banklabel, Manufacturer, @{Label="Speed"; Expression={$_.ConfiguredClockSpeed + " MHz"}}, @{Label="Capacity"; Expression={[int64]($_.Capacity/1GB) + " GB"}} -AutoSize
如果更倾向于用foreach循环来实现(比如需要做更多自定义逻辑),也可以这样写:
# 获取所有物理内存模块 $memoryModules = Get-WmiObject Win32_PhysicalMemory # 遍历每个模块,构建带单位的自定义对象 $formattedMemory = foreach ($module in $memoryModules) { [PSCustomObject]@{ Banklabel = $module.Banklabel Manufacturer = $module.Manufacturer Speed = "$($module.ConfiguredClockSpeed) MHz" Capacity = "$([int64]($module.Capacity/1GB)) GB" } } # 格式化输出表格 $formattedMemory | Format-Table -AutoSize
二、磁盘信息查询:修复多结果显示问题
你原来的磁盘代码无法处理多结果,是因为直接对整个磁盘集合做计算,没有遍历单个磁盘对象。这里同样提供两种解决方式:
方法1:用计算属性直接处理(最简洁)
Get-WmiObject -Class Win32_LogicalDisk | Format-Table @{Label="ID"; Expression={$_.DeviceID}}, @{Label="Name"; Expression={$_.VolumeName}}, @{Label="Format"; Expression={$_.FileSystem}}, @{Label="Capacity"; Expression={[int64]($_.Size/1GB) + " GB"}}, @{Label="Free Space"; Expression={[int64]($_.FreeSpace/1GB) + " GB"}}, @{Label="Used"; Expression={if ($_.Size -gt 0) { (($_.Size - $_.FreeSpace)/$_.Size).ToString("P0") } else { "N/A" }}} -AutoSize
注:这里加了if ($_.Size -gt 0)的判断,避免遇到未挂载磁盘时出现除以0的错误,此时使用率会显示N/A。
方法2:用foreach循环构建对象
# 获取所有逻辑磁盘 $disks = Get-WmiObject -Class Win32_LogicalDisk # 遍历每个磁盘,单独计算并构建带单位的对象 $formattedDisks = foreach ($disk in $disks) { # 处理磁盘为0的情况,避免计算错误 $diskSpace = if ($disk.Size -gt 0) { [int64]($disk.Size/1GB) } else { 0 } $freeSpace = if ($disk.FreeSpace -gt 0) { [int64]($disk.FreeSpace/1GB) } else { 0 } $usedSpace = if ($disk.Size -gt 0) { (($disk.Size - $disk.FreeSpace)/$disk.Size).ToString("P0") } else { "N/A" } [PSCustomObject]@{ ID = $disk.DeviceID Name = $disk.VolumeName Format = $disk.FileSystem Capacity = "$diskSpace GB" "Free Space" = "$freeSpace GB" Used = $usedSpace } } # 格式化输出表格 $formattedDisks | Format-Table -AutoSize
内容的提问来源于stack exchange,提问作者BIll Cosby
相关产品推荐
相关产品推荐

