首页 > 解决方案 > Powershell脚本修复ConvertTo-Html的输出

问题描述

我有一个带有值的 CSV 文件。我需要将我的 CSV 文件显示为 HTML 报告。在我的 CSV 文件中提到了执行报告链接作为列状态下的值。我还需要在我的报告中显示该特定报告单元格值作为链接。我尝试了以下代码,但它更改了状态列下的所有值作为链接。

CSV 文件

Name                 Date               Status
Execution starts    Dec-20               Pass
Comparing           Dec-20               Fail
Report              Dec-20               'http://go.microsoft'

上述链接仅供示例

我使用下面的代码将状态列下的所有值显示为链接。但我只需要我的报告值作为链接,而不是文本值

Function Myfunction 
{ 
    Import-CSV "my csv file link" |Select Name,Date,@{Label="Status";Expression={"<a href='$($_.Status)'>$($_.Status)</a>"}}|
    ConvertTo-Html 
} 
$html=Myfunction

Add-Type -AssemblyName System.Web 
[System.Web.HttpUtility]::HtmlDecode($html) | Out-File d:\temp\log.html

使用上面的代码。它在列状态中显示所有值,因为链接也包括通过、失败文本。因此,我只需要将其作为文本提及,它将是报告中的文本。如果它的链接也需要作为报告中的链接。

标签: htmlpowershellpowershell-3.0

解决方案


如果您想根据名称“报告”来决定,那么这样的事情应该可以工作。

Function Myfunction 
{
    $properties = 'Name',
                  'Date',
                  @{Label="Status";Expression={
                      $(if($_.name -eq 'Report'){"<a href='$($_.Status)'>$($_.Status)</a>"}else{$_.Status})
                  }}

    Import-CSV "my csv file link" | Select-Object $properties | ConvertTo-Html 
} 

如果您只想在值类似于 URL 时添加链接,那么您可以执行类似的操作。

Function Myfunction 
{
    $properties = 'Name',
                  'Date',
                  @{Label="Status";Expression={
                      $(if($_.status -match '://'){"<a href='$($_.Status)'>$($_.Status)</a>"}else{$_.Status})
                  }}

    Import-CSV "my csv file link" | Select-Object $properties | ConvertTo-Html 
} 

推荐阅读