PowerShell新手求助:如何将Win32_LogicalDisk输出追加至CSV且避免信息缺失
嘿Ryan,我来帮你搞定这个CSV保存的问题!
首先,你之前用Add-Content的问题在于:Get-WmiObject返回的是完整的Win32_LogicalDisk对象,但Add-Content只会把对象转换成PowerShell默认的字符串格式(只显示几个关键属性,比如DeviceID、DriveType),所以大部分属性列直接丢失了,这就是你看不到完整信息的原因。
要解决这个问题,咱们得用专门处理对象转CSV的Export-Csv命令,同时用参数实现追加内容不覆盖,具体操作如下:
推荐写法(PowerShell 3.0及以上,现在大部分环境都支持)
直接用Export-Csv的-Append参数,同时加上-NoTypeInformation避免生成多余的类型注释行:
Get-WmiObject Win32_LogicalDisk -ComputerName comp1,comp2,comp3 | Export-Csv -Path 'C:\Book1.csv' -Append -NoTypeInformation
参数说明:
-Append:核心参数,告诉命令不要覆盖原有文件,把新查询到的磁盘数据追加到文件末尾-NoTypeInformation:去掉CSV开头的类型注释(比如#TYPE ...),如果不加的话,每次追加都会重复添加这行,导致CSV格式混乱,后续用Excel或其他工具打开会出问题
兼容PowerShell 2.0的写法(如果你的环境是老版本)
如果你的PowerShell版本是2.0(比较少见了),-Append参数还没出,那就先读取现有CSV数据,和新数据合并后再导出:
# 先检查CSV文件是否存在,存在就读取,不存在就创建空数组 $existingData = if (Test-Path 'C:\Book1.csv') { Import-Csv 'C:\Book1.csv' } else { @() } # 查询新的磁盘数据 $newData = Get-WmiObject Win32_LogicalDisk -ComputerName comp1,comp2,comp3 # 合并数据并导出 $existingData + $newData | Export-Csv 'C:\Book1.csv' -NoTypeInformation
额外注意事项
- 确保每次追加的查询对象属性一致:比如你每次都查
Win32_LogicalDisk,属性就不会变,CSV的列也能保持统一;如果中途换了查询的WMI类,列可能会混乱 - 如果需要筛选特定属性(比如只保留DeviceID、Size、FreeSpace这些),可以先加
Select-Object,比如:
Get-WmiObject Win32_LogicalDisk -ComputerName comp1,comp2,comp3 | Select-Object DeviceID, DriveType, Size, FreeSpace | Export-Csv -Path 'C:\Book1.csv' -Append -NoTypeInformation
这样操作后,你的CSV文件就能完整保留所有磁盘属性列,同时每次运行都会追加新的查询结果,不会覆盖原有内容啦!
内容的提问来源于stack exchange,提问作者ryan4u2
相关产品推荐
相关产品推荐

