powershell:将文件中的特定行写入格式化的csv

时间:2018-02-15 09:50:28

标签: powershell export-to-csv

以下代码为我提供了正确的控制台输出。但我需要它在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

当前输出(控制台):

Output console:

必需输出(csv):

enter image description here

为了提高性能,我想避免使用数组并将输出直接写入csv(无附加)。

提前致谢!

1 个答案:

答案 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 propertiesFileName,并将Memory (MB)的输出更改为$array cmdlet。

只是为了通知您,变量Export-Csv的类型为$array,不会存储重复的密钥。如果需要存储重复的键/值对,则可以使用数组。只是建议! :)