PowerShell可以更好地处理对象,所以我建议除了从字符串和正则表达式构建html文件之外的其他内容。
虽然我要呈现的代码看起来很乏味,但工作效率更高,并且可以轻松地为其他任务量身定制。此代码的第一部分来自my answer to another question about parsing fixed width data from a test file。第二个是简单展示ConvertTo-HTML的工作原理。前者需要利用后者。假设文件“C:\ temp \ Test.txt”是您的日志文件并根据需要进行替换。对于此代码段末尾的输出文件路径也是如此。
# Convert the fixed width left aligned file into a collection of psobjects
$data = Get-Content C:\temp\Test.txt | Where-Object{![string]::IsNullOrWhiteSpace($_)}
$headerString = $data[0]
$headerElements = $headerString -split "\s+" | Where-Object{$_}
$headerIndexes = $headerElements | ForEach-Object{$headerString.IndexOf($_)}
$results = $data | Select-Object -Skip 1 | ForEach-Object{
$props = @{}
$line = $_
For($indexStep = 0; $indexStep -le $headerIndexes.Count - 1; $indexStep++){
$value = $null # Assume a null value
$valueLength = $headerIndexes[$indexStep + 1] - $headerIndexes[$indexStep]
$valueStart = $headerIndexes[$indexStep]
If(($valueLength -gt 0) -and (($valueStart + $valueLength) -lt $line.Length)){
$value = ($line.Substring($valueStart,$valueLength)).Trim()
} ElseIf ($valueStart -lt $line.Length){
$value = ($line.Substring($valueStart)).Trim()
}
$props.($headerElements[$indexStep]) = $value
}
[pscustomobject]$props
}
# Build the html from the $result
$style = @"
body{border: 1px solid black; border-collapse: collapse}
th{border: 1px solid black; background: #dddddd; padding: 5px}
td{border: 1px solid black; padding: 5px}
"@
$results | Select-Object $headerElements | ConvertTo-Html -Head $style | Set-Content c:\temp\test.html
请注意,我在上面的代码中转换了您的样式。生成的文件看起来像html:
这些列无序,但简单的Select-Object无法修复。