如何移除PowerShell中WMI-Object与Select-Object输出的空行?
移除PowerShell Format-List输出开头的空行
这个问题其实是PowerShell里格式化cmdlet的默认行为导致的——Format-List这类输出格式化结果的命令,会在输出开头添加空行来做视觉分隔。要去掉这些空行,有几个简单的办法:
方法1:用Out-String结合Trim()处理输出
把格式化后的结果转换成字符串,再用Trim()方法移除首尾的空白(包括多余的空行),是最直接的方案:
$Pro = Get-WmiObject -Class win32_processor ($Pro | Select-Object Name, NumberOfCores, NumberOfLogicalProcessors | Format-List | Out-String).Trim()
原理说明:
Out-String会把Format-List输出的格式化对象转换成一个完整的字符串(包含所有行和空行).Trim()方法会自动移除字符串开头和结尾的所有空白字符,包括开头的那两行空行,同时保留中间正常的格式
方法2:直接输出属性(如果不需要严格的List格式)
如果可以接受更简洁的输出格式,也可以跳过Format-List,直接循环输出每个属性:
$Pro = Get-WmiObject -Class win32_processor $Pro | ForEach-Object { Write-Host "Name : $($_.Name)" Write-Host "NumberOfCores : $($_.NumberOfCores)" Write-Host "NumberOfLogicalProcessors : $($_.NumberOfLogicalProcessors)" }
这种方式完全没有多余空行,输出更紧凑,但需要手动拼接每行内容。
另外提一句:在PowerShell 5.1及以上版本,微软推荐使用Get-CimInstance替代Get-WmiObject(后者已经被标记为过时),替换后的命令也能适用上面的解决方案,比如:
$Pro = Get-CimInstance -ClassName win32_processor ($Pro | Select-Object Name, NumberOfCores, NumberOfLogicalProcessors | Format-List | Out-String).Trim()
内容的提问来源于stack exchange,提问作者user12682332
相关产品推荐
相关产品推荐

