将日志文件形成为 table

form the log file as a table

我有以下代码

function ping-test($hosts) {
    $conn = [System.Collections.ArrayList]@($hosts)
    [int]$hostsamount = $conn.Count

    foreach($co in $conn)
    {
        $check = Test-Connection $co -Count 3 -ErrorAction SilentlyContinue
        $zugriffzeit = $check | select ResponseTime | Measure-Object ResponseTime -Average
        $avg = [system.math]::Round($zugriffzeit.Average)
        $zeit = Get-Date -Format HH:mm:ss

        if($check -eq $null)
        {
            $pcre = Write-Output $co
            $pire = Write-Output 'False'
            $zure = $null
        }
        else
        {
            $pcre = Write-Output $co
            $pire = Write-Output 'True'
            $zure = Write-Output "$avg ms"
            $zure = $zure.Replace(' ','')
        }
        [void]$re.Add([PSCustomObject] @{PCName=$pcre;    PingResult=$pire;    Zugriffszeit=$zure;    Zeit=$zeit} )
        **$log = "Host:{0} Ping: {1} Zugriffszeit: {2} Zeit: {3}" -f $pcre, $pire, $zure, $zeit 
        $log >> $logpath**

        [int]$recount = $re.Count 
        [int]$eff = $recount - $hostsamount
        try {
            $re.RemoveRange(0, $eff)
        }
        catch{
            Write-Host $Error
        } 
    }
    return $re
}

我使用下面的代码(在那个函数中)

    $log = "Host:{0} Ping: {1} Zugriffszeit: {2} Zeit: {3}" -f $pcre, $pire, $zure, $zeit 
    $log >> $logpath

问题是:我想用列 "Host"、"Ping"、"Zugriffszeit" 和 "Zeit" 组成一个 table。 如何形成此 table 并在某处另存为 .txt 或 .log 文件??

感谢帮助

使用与输出相同的数据!

要导出到 csv(如果您想稍后以编程方式重新使用数据):

$re |Export-Csv $logpath -NoTypeInformation

如果您想再次将其格式化为漂亮的 table,这很简单:

Import-Csv $logpath |Format-Table

如果您只是想在日志文件中输出漂亮的表格:

$re |Format-Table |Out-String |Out-File $logfile

@MathiasR.Jessen 显示导入和导出到 csv。

但是,如果您必须使用 .txt 或 .log 文件(如您问题的方面所述),则使用 PSCustomObject 和 Out-File

    [PSCustomObject]@{
      Host = $pcre
      Ping = $pire 
      Zugriffszeit = $zure
      Zeit = $zeit 
    } | Out-File $logpath

稍后像这样导入:

Get-Content $logpath