我正在编写一个报告脚本,该脚本应列出特定用户当前配置的团队成员。 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/>'
答案 0 :(得分:2)
渲染HTML时,连续的空格通常会被破坏成一个空格。因为添加换行符不会在呈现的HTML中为您提供包装文本。您需要将换行符编码为<br>
(或<br/>
),以便在呈现的HTML中保留它们。但是,您无法在<br/>
之前使用ConvertTo-Html
字符串加入团队成员列表,因为这时角括号将转义为<br/>
并且您将获得字面值{{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>