以下代码为我提供了正确的控制台输出。但我需要它在csv文件中:
$array = @{}
$files = Get-ChildItem "C:\Temp\Logs\*"
foreach($file in $files){
foreach($row in (Get-Content $file | select -Last 2)){
if($row -like "Total peak job memory used:*"){
$sp_memory = $row.Split(" ")[5]
$array.Add(($file.BaseName),([double]$sp_memory))
break
}
}
}
$array.GetEnumerator() | sort Value -Descending |Format-Table -AutoSize
当前输出(控制台):
必需输出(csv):
为了提高性能,我想避免使用数组并将输出直接写入csv(无附加)。
提前致谢!
答案 0 :(得分:1)
将您的最后一行更改为此 -
$array.GetEnumerator() | sort Value -Descending | select @{l='FileName'; e={$_.Name}}, @{l='Memory (MB)'; e={$_.Value }} | Export-Csv -path $env:USERPROFILE\Desktop\Output.csv -NoTypeInformation
这将为您提供桌面上名为csv
的{{1}}文件。
我使用Output.csv
将列标题更改为Calculated properties
和FileName
,并将Memory (MB)
的输出更改为$array
cmdlet。
只是为了通知您,变量Export-Csv
的类型为$array
,不会存储重复的密钥。如果需要存储重复的键/值对,则可以使用数组。只是建议! :)