如何用PowerShell脚本向现有CSV追加磁盘使用快照数据?
PowerShell 磁盘快照记录解决方案
完整可运行脚本
# 配置参数:指定监控驱动器和CSV存储路径 $targetDrive = "C" $outputCsv = "C:\disk_usage_snapshots.csv" # 获取当前时间,生成需求格式的时间戳 $recordTime = Get-Date -Format "M/d/yyyy HH:mm" # 获取驱动器存储数据并转换为GB单位 $driveStats = Get-PSDrive -Name $targetDrive -PSProvider FileSystem $usedGB = [math]::Round($driveStats.Used / 1GB, 4) $totalCapacityGB = [math]::Round(($driveStats.Used + $driveStats.Free) / 1GB, 1) # 构造快照对象,字段名严格匹配需求 $snapshotEntry = [PSCustomObject]@{ "Datetime" = $recordTime "Drive" = $targetDrive "Used (GB)" = $usedGB "Capacity (GB)" = $totalCapacityGB } # 写入CSV:自动创建/追加,避免类型信息干扰 $snapshotEntry | Export-Csv -Path $outputCsv -Append -NoTypeInformation -Encoding UTF8
核心问题解决说明
- 时间戳添加:使用
Get-Date -Format "M/d/yyyy HH:mm"直接生成符合要求的日期时间格式,无需额外字符串处理 - 追加而非覆盖:
Export-Csv的-Append参数是关键,它会检测目标文件是否存在:- 文件不存在时自动创建并写入表头
- 文件存在时直接在末尾追加新数据行
- 单位转换与精度控制:通过除以
1GB将字节转换为GB,用[math]::Round()分别控制已用空间保留4位小数、总容量保留1位小数,完全匹配示例格式 - 避免冗余信息:
-NoTypeInformation参数防止每次写入时添加PowerShell的类型注释行,保证CSV结构干净
运行效果验证
执行脚本后,CSV文件的结构会和需求完全一致:
Datetime,Drive,Used (GB),Capacity (GB)
10/3/2022 16:24,C,225.2344,995.5
10/3/2022 16:29,C,223.5344,995.5
(注:CSV本质是逗号分隔,用Excel或表格工具打开会自动呈现对齐的列格式)
内容的提问来源于stack exchange,提问作者Sean P
相关产品推荐
相关产品推荐

