私はかつて同じ要件を持っていました...これが私がやった方法です
$loglocation = "C:\test\dump.txt"
$reportlocation = "C:\test\dump.csv"
$linedelimiter = ":"
$blockdelimiter = "FileSize"
$file = Get-Content $loglocation
$report = @()
$block = @{}
foreach ($line in $file)
{
if($line.contains($linedelimiter))
{
$key = $line.substring(0,$line.indexof($linedelimiter)).trimend()
$value = $line.substring($line.indexof($linedelimiter)+1).trimstart()
$block.Add($key,$value)
if ($block.keys -contains $blockdelimiter)
{
$obj = new-object psobject -property $block
$report += $obj
$block = @{}
}
}
}
$report
$report | Export-Csv $reportlocation -NoTypeInformation
したがって、各行を循環し、キーと値を定義して、オブジェクトをハッシュテーブルに追加します。キーにブロック区切り文字が含まれると、新しいオブジェクトが配列に書き込まれ、ハッシュテーブルがクリアされます。
私の場合、行区切り文字はコロンで、ブロック区切り文字は有効なレコードだったので、いくつか変更を加える必要があります。このアプローチがニーズに合っていて、何をすべきか分からない場合はお知らせください。
PS デフォルトでは、配列内の最初のオブジェクトの noteproperties のみが表示されるため、配列を Select-Object にパイプし、必要なすべてのプロパティを追加する必要があります。
よろしく。