在 powershell 数组中换行,然后将其转换为 html?
Break lines in powershell array and then convert it to html?
我发誓我已经搜索了很多,但仍然没有找到解决这个问题的方法。
我所做的基本上是将数组转换为 HTML 但我找不到任何方法在新行中打破数组的单词。
例如:
$Member.ExpireOn=((Invoke-SqliteQuery -SQLiteConnection $C -Query "SELECT expireon FROM exceptions_test WHERE (identity='$User')").ExpireOn -join "`r`n")
$Member.ExpireOn 基本上是这样的:
31/01/2019 00:00:00 31/03/2019 00:00:00 31/03/2019 00:00:00
所以即使我用 -join "
rn"
或 <br>
加入它,我也找不到任何方法让数组中的每个元素都有一行。
我需要这样做,因为之后我将整个数组打印在 HTML 文件中,这就是我得到的:
而不是在这些词之间添加 <br>
。
希望有人能帮助我:)
even if I join it with -join "`r`n"
HTML 中的空格无关紧要,因此您不能强制换行;它们将显示在 HTML 标记 (源代码)中,但不会显示在 呈现时 .
or with <br>
问题是 ConvertTo-Html
- 我假设你正在使用 - escapes any输入对象的 属性 值 中的 HTML 标记(假设您要逐字使用这些值),因此 您不能通过 <br>
为了使单个 table 单元格使用多行 - 你会在 table 中看到 literal <br>
字符串,因为ConvertTo-Html
已将它们转义为 <br>
。
一个快速而肮脏的解决方法是手动将转义的<br>
元素转换回它们的HTML形式:
# Sample input objects
$o = [pscustomobject] @{
Foo = 'Cert A'
# Join the array elements with <br>
ExpireOn = (Get-Date), (Get-date).AddDays(1) -join '<br>'
}, [pscustomobject] @{
Foo = 'Cert B'
ExpireOn = (Get-Date).AddDays(2), (Get-date).AddDays(3) -join '<br>'
}
# Convert *escaped* <br> elements back to literal '<br>'
# NOTE: This will replace *all* instances of '<br>' in the
# document text, wherever it may occur.
($o | ConvertTo-Html) -replace '<br>', '<br>'
这会产生以下结果,表明 <br>
已有效通过,这应该使输入日期值呈现在单独的行上:
<!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>Foo</th><th>ExpireOn</th></tr>
<!-- Note the <br> elements -->
<tr><td>Cert A</td><td>2/5/2020 12:51:45 PM<br>2/6/2020 12:51:45 PM</td></tr>
<tr><td>Cert B</td><td>2/7/2020 12:51:45 PM<br>2/8/2020 12:51:45 PM</td></tr>
</table>
</body></html>
在我的 Mac 上的 Chrome 中,呈现如下:
如果您需要更强大的解决方案,您将不得不使用HTML解析器 - 请参阅.
我发誓我已经搜索了很多,但仍然没有找到解决这个问题的方法。 我所做的基本上是将数组转换为 HTML 但我找不到任何方法在新行中打破数组的单词。
例如:
$Member.ExpireOn=((Invoke-SqliteQuery -SQLiteConnection $C -Query "SELECT expireon FROM exceptions_test WHERE (identity='$User')").ExpireOn -join "`r`n")
$Member.ExpireOn 基本上是这样的:
31/01/2019 00:00:00 31/03/2019 00:00:00 31/03/2019 00:00:00
所以即使我用 -join "
rn"
或 <br>
加入它,我也找不到任何方法让数组中的每个元素都有一行。
我需要这样做,因为之后我将整个数组打印在 HTML 文件中,这就是我得到的:
而不是在这些词之间添加 <br>
。
希望有人能帮助我:)
even if I join it with
-join "`r`n"
HTML 中的空格无关紧要,因此您不能强制换行;它们将显示在 HTML 标记 (源代码)中,但不会显示在 呈现时 .
or with
<br>
问题是 ConvertTo-Html
- 我假设你正在使用 - escapes any输入对象的 属性 值 中的 HTML 标记(假设您要逐字使用这些值),因此 您不能通过 <br>
为了使单个 table 单元格使用多行 - 你会在 table 中看到 literal <br>
字符串,因为ConvertTo-Html
已将它们转义为 <br>
。
一个快速而肮脏的解决方法是手动将转义的<br>
元素转换回它们的HTML形式:
# Sample input objects
$o = [pscustomobject] @{
Foo = 'Cert A'
# Join the array elements with <br>
ExpireOn = (Get-Date), (Get-date).AddDays(1) -join '<br>'
}, [pscustomobject] @{
Foo = 'Cert B'
ExpireOn = (Get-Date).AddDays(2), (Get-date).AddDays(3) -join '<br>'
}
# Convert *escaped* <br> elements back to literal '<br>'
# NOTE: This will replace *all* instances of '<br>' in the
# document text, wherever it may occur.
($o | ConvertTo-Html) -replace '<br>', '<br>'
这会产生以下结果,表明 <br>
已有效通过,这应该使输入日期值呈现在单独的行上:
<!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>Foo</th><th>ExpireOn</th></tr>
<!-- Note the <br> elements -->
<tr><td>Cert A</td><td>2/5/2020 12:51:45 PM<br>2/6/2020 12:51:45 PM</td></tr>
<tr><td>Cert B</td><td>2/7/2020 12:51:45 PM<br>2/8/2020 12:51:45 PM</td></tr>
</table>
</body></html>
在我的 Mac 上的 Chrome 中,呈现如下:
如果您需要更强大的解决方案,您将不得不使用HTML解析器 - 请参阅