从HTML内容的哈希表到HTML文档的ConvertTo-Html

时间:2018-12-28 15:14:08

标签: powershell

我试图在按计划执行Powershell脚本生成的文档上显示一些html编码信息。

以下MVP说明了我的问题:

@{ a="<div style=""color:red;"">Hello</div>"; b="Hi"}.GetEnumerator() | Select Key, Value | ConvertTo-Html | Out-File -Encoding utf8 -FilePath C:\Scripts\Test.html

哪个输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HTML TABLE</title>
</head><body>
<table>
<colgroup><col/><col/></colgroup>
<tr><th>Key</th><th>Value</th></tr>
<tr><td>a</td><td>&lt;div style=&quot;color:red;&quot;&gt;Hello&lt;/div&gt;</td></tr>
<tr><td>b</td><td>Hi</td></tr>
</table>
</body></html>

打开后,其外观如下:

Ouptut of command when opened

但是我希望我的Hello是红色的,并且不要看到转义的html div代码。

有什么办法告诉ConvertTo-Html不要逃避我的输入吗?

注意:此MVP仅说明我面临的问题。实际上,我有一个非常复杂的报告,我想对其进行装饰以便于查看(颜色编码,符号等)。

这是我要配置的报告: Badly formatted report output

1 个答案:

答案 0 :(得分:2)

ConvertTo-Html cmdlet的主要目的是提供一个易于使用的工具,用于将对象列表转换为表格HTML报告。此转换的输入应为非HTML数据,并且HTML中具有特殊含义的字符将自动转义。无法关闭。

可以在表格数据之前或之后通过参数-Body-PreContent-PostContent将未转义的HTML片段插入到HTML报告中。但是,对于更复杂的报告,这可能还不够通用。在这种情况下,最好的方法是将报告的各个部分作为片段生成,例如

$ps = Get-Process | ConvertTo-Html -PreContext '<p>Process list</p>' -Fragment

,然后将所有片段与here-string组合在一起:

$html = @"
<html>
<head>
...
</head>
<body>
${ps}
<hr>
${other_fragment}
...
</body>
</html>
"@

对于生成的片段的特定部分的单独格式化:不支持。您需要自己通过搜索和替换(在片段中或完整的HTML内容中)或通过解析和修改完整的HTML内容来自己修改生成的HTML代码。