Разбить строки в массиве powershell, а затем преобразовать его в html? - PullRequest
1 голос
/ 05 февраля 2020

Клянусь, я много искал и до сих пор не нашел решения этой проблемы. Я просто конвертирую массивы в 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 " r n" или с <br>, я не могу найти какой-либо способ получить строку для каждого элемента в массив. Мне нужно это сделать, потому что после этого я печатаю весь массив в файле HTML, и вот что я получаю:

enter image description here

вместо <br> между этими словами. Надеюсь, кто-нибудь может мне помочь:)

1 Ответ

1 голос
/ 05 февраля 2020

, даже если я присоединюсь к нему с -join "`r`n"

Пробел в HTML незначителен, поэтому вы не можете принудительно разрывать строки таким образом; они будут отображаться в HTML разметке (исходный код), но не при визуализации .

или с <br>

Проблема в том, что ConvertTo-Html - который я предполагаю, что вы используете - экранирует любую HTML разметку на входе значения свойств объектов (предполагается, что вы хотите использовать значения дословно), поэтому вы не можете передать от <br> до , чтобы одна ячейка таблицы использовала несколько строк - вы увидите буквальных <br> строк в таблице, потому что ConvertTo-Html избежал их как &lt;br&gt;.


A быстрый и грязный обходной путь будет вручную преобразовать экранированные элементы <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 '&lt;br&gt;' in the 
#       document text, wherever it may occur.
($o | ConvertTo-Html) -replace '&lt;br&gt;', '<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>

В Chrome на моей маме c это выглядит следующим образом:

enter image description here


Если вам нужно более надежное решение , вам придется использовать HTML парсер - см. этот ответ .

...