如何用PowerShell计算磁盘数据增长量并生成CSV报表?
解决PowerShell磁盘数据增长计算问题
方法一:在现有对比结果中新增「数据增长量」列
Compare-Object的SideIndicator字段里,<=代表初始数据集($initial),=>代表最新查询数据集($list)。数据增长量的逻辑是:初始剩余空间 - 最新剩余空间(剩余空间减少的数值就是磁盘新增的数据量)。
先把初始和最新数据转为哈希表,方便快速匹配同服务器同盘符的对应值,再计算增长量:
# 将初始数据转为哈希表,键为「Server-盘符」,值为数值型剩余空间 $initialHash = @{} foreach ($item in $initial) { $key = "$($item.Server)-$($item.Laufwerksbuchstabe)" $initialHash[$key] = [Int64]$item.SizeRemaining } # 将最新数据转为哈希表 $listHash = @{} foreach ($item in $list) { $key = "$($item.Server)-$($item.Laufwerksbuchstabe)" $listHash[$key] = [Int64]$item.SizeRemaining } # 执行对比并新增增长量列 $vergleich = Compare-Object $initial $list -Property SizeRemaining -IncludeEqual -PassThru | Where-Object {$_.SideIndicator -ne "=="} | Select-Object Server, Laufwerksbuchstabe, SizeRemaining, SideIndicator, Datum, @{Name='Datenwachstum'; Expression={ $key = "$($_.Server)-$($_.Laufwerksbuchstabe)" if ($_.SideIndicator -eq '=>') { # 最新数据行:用初始剩余空间减去当前剩余空间得到增长量 $initialHash[$key] - [Int64]$_.SizeRemaining } else { # 初始数据行(仅当最新数据中无此磁盘时出现) [Int64]$_.SizeRemaining - $listHash[$key] } }} | Sort-Object -Property Server -Descending # 导出带增长量的CSV $vergleich | Export-Csv -Delimiter ';' -Append -Path C:\Administrativ\Festplattenanalyse.csv -NoTypeInformation
方法二:生成仅展示磁盘增长量的独立CSV
如果只需要每个磁盘的增长量统计,不需要对比的原始字段,可以直接匹配初始和最新数据,计算后导出:
# 转换初始数据为哈希表 $initialHash = @{} foreach ($item in $initial) { $key = "$($item.Server)-$($item.Laufwerksbuchstabe)" $initialHash[$key] = [Int64]$item.SizeRemaining } # 遍历最新数据,匹配初始数据计算增长量 $wachstumListe = foreach ($item in $list) { $key = "$($item.Server)-$($item.Laufwerksbuchstabe)" if ($initialHash.ContainsKey($key)) { [PSCustomObject]@{ Server = $item.Server Laufwerksbuchstabe = $item.Laufwerksbuchstabe InitialerFreierSpeicher = $initialHash[$key] AktuellerFreierSpeicher = [Int64]$item.SizeRemaining Datenwachstum = $initialHash[$key] - [Int64]$item.SizeRemaining Datum = $item.Datum } } } # 导出仅含增长量的CSV $wachstumListe | Export-Csv -Delimiter ';' -Path C:\Administrativ\FestplattenWachstum.csv -NoTypeInformation
注意事项
- 用
Import-Csv读取的SizeRemaining默认是字符串类型,所以代码中手动转为[Int64]确保数值计算正常。 - 如果某个磁盘仅存在于初始数据或最新数据中,方法二会自动忽略该条目,可根据需求添加逻辑标记为「新增磁盘」或「已移除磁盘」。
内容的提问来源于stack exchange,提问作者Anton Struhli
相关产品推荐
相关产品推荐

