我有一个shell命令我试图使用Powershell将其很好地格式化为HTML。将空格转换为表格单元格
这里是外壳输出产生什么:
我使用下面的代码来解析该部分出shell命令,并插入<br>
标记创建HTML友好的输出。
$VPLEX = plink 192.168.10.10 -l admin -pw password ./health
$regex = '(?ms)Clusters:(.+?)Meta Data:'
$VPLEX = $VPLEX -join "<br>"
$VPLEX_Clusters = [regex]::Matches($VPLEX,$regex) | foreach {$_.groups[1].value}
我然后试图使用此代码换别的东西,我在想一个选项卡的最初(如文字处理器将处理它),但现在我使用4
的空间。
$VPLEX_Clusters = $VPLEX_Clusters -replace ' {1,}', " "
$VPLEX_Clusters | Out-File F:\Scripts\healthcheck\test.html
这将产生以下:
正如你所看到的文本没有对齐垂直因此很难理解。我在想,也许我可以将空格转换为新的表格单元格,并分别解析出每一行?我真的不太确定,但我希望有一种更简单的方法将shell输出转换为HTML,而不会丢失原始间距。
编辑 (新代码,对齐,而是只使用第一行)
$VPLEX = plink 192.168.10.10 -l admin -pw password ./health
$regex = '(?ms)Clusters:(.+?)Meta Data:'
$VPLEX = $VPLEX -join "`r`n"
$VPLEX_Clusters = [regex]::Matches($VPLEX,$regex) | foreach {$_.groups[1].value}
$VPLEX_Clusters | Out-File F:\Scripts\healthcheck\Vplex.txt
(gc F:\Scripts\healthcheck\Vplex.txt | select -Skip 5) | sc F:\Scripts\healthcheck\cluster1.txt
$Vcluster1 = [IO.File]::ReadAllText("F:\Scripts\healthcheck\cluster1.txt")
$html = $Vcluster1 | % {
$cluster = $_ -split ' +'
New-Object -Type PSCustomObject -Property @{
'Clustername' = $cluster[0]
'Cluster ID' = [int]$cluster[1]
'State' = $cluster[2]
'Health' = $cluster[3]
'Connected' = [convert]::ToBoolean($cluster[4])
'Expelled' = [convert]::ToBoolean($cluster[5])
'Local-com' = $cluster[6]
}
} | ConvertTo-Html -Fragment
$html | Out-File F:\Scripts\healthcheck\test.html
Invoke-Expression F:\Scripts\healthcheck\test.html
这是文本文件(cluster1.txt)是从阅读:
这里是最终的输出,你可以看到只产生第一行。
你有没有考虑使用ConvertTo-HTML,而不是试图格式化自己的HTML?像'$ VPLEX_Clusters | ConvertTo-HTML | Out-File F:\ Scripts \ healthcheck \ test.html' – TheMadTechnician
@TheMadTechnician问题是输出似乎来自Linux主机('plink'是命令行SSH客户端),所以它是一个字符串“table”,而不是PowerShell对象。 –
@AnsgarWiechers是正确的。虽然我在想也许我可以用逗号替换空格并创建一个CSV文件。然后我可以使用ConvertFrom-CSV自动创建html表格。这会有什么意义吗? – RichT