如何让Get-WmiObject磁盘查询结果显示对应服务器主机名
修改PowerShell磁盘查询代码以显示主机名
原代码用于批量查询服务器磁盘剩余空间,但结果缺少对应主机名,可通过以下方式修改:
修改后的完整代码
$pc = Get-Content "C:\Users\user\Desktop\computers.txt" $disks = Get-WmiObject -class "Win32_LogicalDisk" -namespace "root\CIMV2" -computername $pc $results = foreach ($disk in $disks) { if ($disk.Size -gt 0) { $size = [math]::round($disk.Size/1GB, 0) $free = [math]::round($disk.FreeSpace/1GB, 0) [PSCustomObject]@{ HostName = $disk.__SERVER # 新增主机名字段 Drive = $disk.Name "Free(%)" = "{0:P0}" -f ($free/$size) # 修正百分比格式化顺序错误 "FreeSpace(GB)" = $free # 可选:新增实际剩余空间数值,便于直观查看 } } } $results | Where-Object{( $_.Drive -ne "Z:") -and ($_.Drive -ne "Y:") } | Where-Object{ [double]($_.Free(%) -replace '%','') -le 80 } | Out-GridView
关键修改说明
- 新增主机名字段:
Get-WmiObject返回的Win32_LogicalDisk对象自带__SERVER属性,直接将其加入自定义对象即可获取目标服务器的主机名,完全符合原代码的实现方式。 - 修正百分比格式化错误:原代码中
"{1:P0}" -f $free, ($free/$size)的占位符顺序错误,会导致显示的百分比与实际剩余比例不符,改为"{0:P0}" -f ($free/$size)才能正确显示剩余空间占总容量的百分比。 - 调整过滤逻辑:由于
Free(%)是带%符号的字符串格式,过滤时需要先去除%符号并转为数值类型,再与80比较,避免字符串比较导致的逻辑错误。
内容的提问来源于stack exchange,提问作者Delyan
相关产品推荐
相关产品推荐

