PowerShell导出PSDrive数据到CSV格式异常求助
PowerShell导出PSDrive容量数据到CSV异常的解决方法
问题场景
执行以下PowerShell命令获取C、D盘的容量信息并格式化显示:
Get-PSDrive -Name C, D | Select-Object -Property Name, @{Name="Total (GB)"; Expression={($_.Used + $_.Free) / 1gb}}, @{Name="Used (GB)"; Expression={$_.Used / 1gb}}, @{Name="Free (GB)"; Expression={$_.Free / 1gb}} | Format-Table
控制台能正常输出格式化表格:
Name Total (GB) Used (GB) Free (GB) ---- ---------- --------- --------- C 241.21 109.29 131.92 D 233.90 0.10 233.80
但追加Export-Csv .\Desktop\CheckDrive.csv -Encoding utf8后,导出的CSV数据完全异常,格式混乱。
问题原因
Format-Table是仅用于控制台可视化输出的命令,它会将原始的自定义对象转换为专门的格式化对象(如FormatEntryData),这些对象包含的是排版、样式相关的属性,而非我们需要的容量数据。将这类格式化对象导出到CSV,自然会得到错误的内容。
解决方法
移除管道中的Format-Table步骤,直接将Select-Object输出的原始数据对象传递给Export-Csv。同时建议添加-NoTypeInformation参数,避免CSV文件开头生成多余的类型注释行。
修正后的完整命令:
Get-PSDrive -Name C, D | Select-Object -Property Name, @{Name="Total (GB)"; Expression={[math]::Round(($_.Used + $_.Free) / 1gb, 2)}}, @{Name="Used (GB)"; Expression={[math]::Round($_.Used / 1gb, 2)}}, @{Name="Free (GB)"; Expression={[math]::Round($_.Free / 1gb, 2)}} | Export-Csv .\Desktop\CheckDrive.csv -Encoding utf8 -NoTypeInformation
注:添加
[math]::Round(..., 2)是为了和控制台显示的小数位数保持一致,避免导出高精度浮点数。
导出后的CSV内容示例:
Name,Total (GB),Used (GB),Free (GB) C,241.21,109.29,131.92 D,233.90,0.10,233.80
内容的提问来源于stack exchange,提问作者Ong K.S
相关产品推荐
相关产品推荐

