Powershell отправляет массив строк в ConvertTo-Html - PullRequest
0 голосов
/ 04 июня 2018

В целях тестирования (перед применением к большому коду) я решил передать массив строк в convertTo-html, надеясь создать какую-то таблицу, отображающую мой массив.

[String]$servers= @('GT544', 'HT54765', 'J4356', 'SW5654', 'JY67432')
psedit "C:\Users\karljoey.chami\Desktop\Htmltesting\Red.css"
$file = "C:\Users\karljoey.chami\Desktop\Htmltesting\Result.html"
$servers | ConvertTo-Html 
-Title "Servers in a table" -CssUri "C:\Users\karljoey.chami\Desktop\Htmltesting\Red.css" 
-pre "<h>The servers are</h>" | Out-file $file 
Invoke-Item $file

Проблема в том, чтомой массив строк передается в виде числа символов, которое содержит массив вместо самих элементов.

1 Ответ

0 голосов
/ 04 июня 2018

Попробуйте выполнить следующее:

$servers= 'GT544', 'HT54765', 'J4356', 'SW5654', 'JY67432'
$servers | ConvertTo-Html -Property @{ l='Name'; e={ $_ } }

Примечание. Как отмечает EBGreen , переменная $servers не должна быть ограничена по типу как [string] $servers = ..., посколькупреобразует массив строк в одну строку.В этом случае нет строгой необходимости ограничивать тип, но вы можете использовать [string[]] $servers = ...

ConvertTo-Html по умолчанию перечисляет все свойства входных объектов, и вслучай [string] экземпляров, который является только свойством .Length.

Поэтому вам нужно использовать вычисляемое свойство , которое обернет ваши строки, что и является
@{ l='Name'; e={ $_ } } делает;запись l дает вашему свойству имя (будет использоваться в заголовке таблицы), а запись e определяет его значение через блок скрипта ({ ... }),которая в данном случае является просто самой строкой ввода ($_).

Подробнее о вычисляемых свойствах см. этого ответа моего, но обратите внимание, что ConvertTo-Html с любопытствомподдерживает только ключ l / label для присвоения имени свойству (не также n / name).
Кроме того, передача вычисленных свойств в настоящее время не поддерживается в PowerShell Core , по состоянию на v6.1.0-preview.2

Выше приведено:

<!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/></colgroup>
<tr><th>Name</th></tr>
<tr><td>GT544</td></tr>
<tr><td>HT54765</td></tr>
<tr><td>J4356</td></tr>
<tr><td>SW5654</td></tr>
<tr><td>JY67432</td></tr>
</table>
</body></html>

Чтобы сложить все вместе:

$servers = 'GT544', 'HT54765', 'J4356', 'SW5654', 'JY67432'
$file = "C:\Users\karljoey.chami\Desktop\Htmltesting\Result.html"

$servers | ConvertTo-Html -Property @{ l='Name'; e={ $_ } } -Title "Servers in a table" `
  -CssUri "C:\Users\karljoey.chami\Desktop\Htmltesting\Red.css" `
  -pre "<h>The servers are</h>" | Out-file $file  

Invoke-Item $file
...