3 votes

Piping Powershell d'un tableau de chaînes de caractères à ConvertTo-Html

A des fins de test (avant d'appliquer mon gros code), j'ai décidé de passer un tableau de chaînes à convertTo-html en espérant créer une sorte de tableau affichant mon tableau.

[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

Le problème est que mon tableau de chaînes de caractères est transmis comme le nombre de caractères que le tableau contient au lieu des éléments eux-mêmes.

3voto

mklement0 Points 12597

Essayez ce qui suit :

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

Note : Comme EBGreen observe, le $servers ne devrait pas être soumise à des contraintes de type comme la variable [string] $servers = ... car cela permet de convertir le tableau de chaînes de caractères en un fichier simple chaîne. Il n'est pas strictement nécessaire d'appliquer une contrainte de type dans ce cas, mais vous pouvez utiliser la méthode suivante [string[]] $servers = ...

ConvertTo-Html par défaut énumère tous les propriétés des objets d'entrée, et dans le cas de [string] instances qui ne sont que les .Length propriété.

Vous devez donc utiliser un propriété calculée que enveloppes vos cordes, ce qui est ce que
@{ l='Name'; e={ $_ } } fait ; le l L'entrée donne à votre propriété une nom (sera utilisé dans l'en-tête du tableau), et e L'entrée définit son valeur via un bloc script ( { ... } ), qui dans ce cas est simplement la chaîne d'entrée elle-même ( $_ ).

Pour en savoir plus sur les propriétés calculées, voir cette réponse de la mienne, mais notez que ConvertTo-Html ne prend curieusement en charge que le l / label pour nommer la propriété (pas également n / name ).
De même, la transmission des propriétés calculées est actuellement cassé complètement dans PowerShell Core à partir de la version 6.1.0-preview.2

Ce qui précède donne :

<!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>

Pour mettre tout ça ensemble :

$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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X