将多行值添加到单个HTML单元格

时间:2017-12-19 12:07:59

标签: html arrays powershell

我正在编写一个报告脚本,该脚本应列出特定用户当前配置的团队成员。 endresult是一个HTML页面,列出了所有用户的属性,包括。 teammembers。

基本上我将所有用户信息存储在PSCustomObject中:

$UserObject | Add-Member -MemberType NoteProperty -Name "Team" -Value $Settings.Teammembers
...
$AllObject += $UserObject
...
$AllObject | ConvertTo-Html -Property * -Head "<H2>User</H2>" -CssUri $csspath |
    Out-File $outpath -Append

$Settings.Teammembers是一个字符串数组。

如果我将此按原样转换为HTML页面,则所有团队成员都列在一行中:

user1@domain.com user2@domain.com

但最后看起来应该是这样的:

user1@domain.com
user2@domain.com

我尝试了以下方法:

  • 在每个用户名后添加`n。在ISE中调试期间,该值看起来很好,但在HTML文件中它看起来是一样的。

  • $Settings.Teammembers中的所有用户保存在一个变量$UserTeam中,然后-join

    $UserTeam = $UserTeam -join '<br/>'
    

1 个答案:

答案 0 :(得分:2)

渲染HTML时,连续的空格通常会被破坏成一个空格。因为添加换行符不会在呈现的HTML中为您提供包装文本。您需要将换行符编码为<br>(或<br/>),以便在呈现的HTML中保留它们。但是,您无法在<br/>之前使用ConvertTo-Html字符串加入团队成员列表,因为这时角括号将转义为&lt;br/&gt;并且您将获得字面值{{1在渲染的HTML输出中。

将换行符改为准备好的HTML的一种方法是使用带回调函数的正则表达式替换来替换<br/>中的空格(或换行符):

<td>

然而,更优雅的方法是$html = $AllObject | ConvertTo-Html ... $cb = { $args[0].Groups[1].Value + ($args[0].Groups[2].Value -replace '\n', '<br/>') + $args[0].Groups[3].Value } $re = [regex]'(<td>)(.*?)(</td>)' $re.Replace($html, $cb) | Out-File ... 标记的CSS格式,用于定义whitespace handling as pre-formatted(类似于<td>标记)。将这样的内容添加到CSS文件中应该足够了:

<pre>