Powershell 数组 -> HTML 作为字符串而不是 .Length

Powershell Array -> HTML as string not as .Length

目前我有一个脚本可以做很多事情,一件事是它检查一个 .txt 文件以获取所有当前服务器,然后在执行脚本的其余部分之前执行 ping 以检查连接性.我目前有这个设置来将它无法 ping 通的服务器添加到一个阵列中,这样它就不会减慢尝试在失败的服务器上进行的其余进程的速度。在脚本的末尾,我将其全部转换为 HTML 文档以便于查看。我想将连接失败的服务器添加到 HTML 文档的末尾,以表明这些服务器失败。

就像现在的脚本一样,它只打印我放入这些服务器的数组的 .Length 属性。这是我设置数组的代码,向其中添加服务器,然后convertto-html 部分。

$servers = Get-Content "path\to\text.txt"
$failedConn = New-Object 'System.Collections.Generic.List[System.Object]'

foreach ($server in $servers)
{
     $pingResult = Get-Ciminstance -ClassName win32_pingstatus -Filter "address='$server' and timeout=1000"
     if ($pingResult.StatusCode -eq 0) 
     {
         Write-Host "$server ping successful
     }
     else
     {
         Write-Host "$server ping Fail" -ForegroundColor Red
         $failedConn.Add($server)
         <# Also tried $failedConn += ($server) with the same error #>
     }
}
<# Code for a forloop to do tasks where it adds an HTML variable called CombinedBody styling the tables whatnot #>
$CombinedBody += $failedConn | ConvertTo-Html | Out-File -Append C:\Path\To\html.html

结果只是将失败的连接放在 HTML 文档的最底部,但它会将其打印为每个服务器名称的长度。我如何让它打印实际的服务器名称?非常感谢任何帮助!!

LengthString 对象中唯一被 ConvertTo-Html 看到的 属性,因此这就是输出的内容。作为一种解决方法,您可以将服务器名称包装在另一个对象中,该对象只有一个 属性 包含名称,然后它应该输出实际名称。像这样:

$failedConn | foreach{[pscustomobject]@{"Failed Servers" = $_}} | ConvertTo-Html | Out-File -Append C:\Path\To\html.html

请注意,我已经删除了 $CombinedBody += ,因为 Out-File 没有 return 任何输出,因此不会执行任何操作。