我试图在按计划执行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><div style="color:red;">Hello</div></td></tr>
<tr><td>b</td><td>Hi</td></tr>
</table>
</body></html>
打开后,其外观如下:
但是我希望我的Hello
是红色的,并且不要看到转义的html div
代码。
有什么办法告诉ConvertTo-Html
不要逃避我的输入吗?
注意:此MVP仅说明我面临的问题。实际上,我有一个非常复杂的报告,我想对其进行装饰以便于查看(颜色编码,符号等)。
答案 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代码。