如何在PowerShell中将磁盘信息添加到指定CSV列
把PowerShell获取的磁盘信息批量添加到指定CSV列的方法
核心思路
先把原始CSV读进内存,再把磁盘信息转成以盘符为键的哈希表(方便快速匹配),最后遍历CSV的每一行,把对应磁盘的信息填充到指定列里,最后导出成新CSV。
具体操作步骤
导入原始CSV文件
用Import-Csv命令把你的原始CSV读进来,示例代码:$originalCsv = Import-Csv -Path "C:\你的原始文件路径\原始.csv"整理磁盘信息为哈希表
把你提供的磁盘查询代码调整为哈希表格式,便于快速匹配盘符:# 获取磁盘信息并转为哈希表,键是盘符(如C:) $diskHash = @{} Get-WmiObject win32_logicaldisk | ForEach-Object { $diskHash[$_.DeviceID] = [PSCustomObject]@{ 卷名 = $_.VolumeName 磁盘容量_GB = [math]::Round($_.Size/1GB,2) 剩余空间_GB = [math]::Round($_.FreeSpace/1GB,2) } }这里的键名(比如"卷名")可以根据你预期CSV的列名自行修改。
遍历CSV行,填充磁盘信息
假设你的原始CSV里有一列叫磁盘盘符(用来和DeviceID匹配),要把磁盘信息填充到卷名、总容量、剩余空间这几个列里,代码如下:$updatedCsv = $originalCsv | ForEach-Object { # 取出当前行的盘符 $driveLetter = $_.磁盘盘符 # 从哈希表里找对应磁盘信息 $diskInfo = $diskHash[$driveLetter] # 填充指定列,如果没找到匹配的盘符就留空 $_.卷名 = if ($diskInfo) { $diskInfo.卷名 } else { "" } $_.总容量 = if ($diskInfo) { $diskInfo.磁盘容量_GB } else { "" } $_.剩余空间 = if ($diskInfo) { $diskInfo.剩余空间_GB } else { "" } # 返回修改后的行 $_ }注意:这里的列名必须和你原始CSV、预期CSV的列名对应,比如原始CSV里的匹配列叫"Drive",就把
$_.磁盘盘符改成$_.Drive。导出新的CSV文件
将修改后的内容导出为新CSV,避免覆盖原始文件:$updatedCsv | Export-Csv -Path "C:\你的输出路径\新的CSV文件.csv" -NoTypeInformation -Encoding UTF8-Encoding UTF8是为了避免中文乱码,可根据你的系统需求调整。
注意事项
- 确保原始CSV里的盘符格式和
DeviceID一致(比如都是C:这种带冒号的格式),如果原始CSV里是C不带冒号,可修改为$driveLetter = "$($_.磁盘盘符):" - 哈希表的匹配方式比循环查找效率更高,适合处理行数较多的CSV
- 导出时务必使用新文件名,避免覆盖原始文件导致数据丢失
内容的提问来源于stack exchange,提问作者Prakash
相关产品推荐
相关产品推荐

