格式化集合的输出

时间:2017-10-08 23:20:42

标签: powershell powershell-v2.0 powershell-v3.0

$servers = Get-Content "servers.txt"
$collection = $()
foreach ($server in $servers)
{

    $status = @{ "ServerName" = $server; "TimeStamp" = (Get-Date -f G) }
    if (Test-Connection $server -Count 1 -ea 0 -Quiet)
    {
        $status["Results"] = "Online"
        $test = Test-Connection -ComputerName $server -Count 4 -ErrorAction SilentlyContinue 
        $stat = $test | Measure-Object -Property ResponseTime -Average -Maximum -Minimum
        $status["Avg"] = $stat.Average
        $status["Lost"] = [string]$(100*(4-$test.Count)/4) + ' %'

    } 
    else 
    { 
        $status["Results"] = "Down" 
    }
    New-Object -TypeName PSObject -Property $status -OutVariable serverStatus
    $collection += $serverStatus 
}
$collection | Out-GridView | Export-Csv -LiteralPath .\ServerStatus3.csv -NoTypeInformation

如何输出表格?但是这样的列是按特定的顺序排列的
如果我删除“丢失”列,它将显示为表格。 See 但正如您所看到的,第一列未完全显示 我需要的最重要的事情是每个集成都会立即显示在屏幕上!

2 个答案:

答案 0 :(得分:0)

如果您只是想要格式化,可以将Format-Table-Wrap参数一起使用。

但是如果你使用格式表,你将失去对象结构,结果将只是文本,不能导出到CSV文件。

$ collection | Out-GridView | Export-Csv -LiteralPath。\ ServerStatus3.csv -NoTypeInformation

上面的代码行将生成一个空的csv文件。您必须将-Passthru参数设置为Out-GrifView,我建议您不要使用Out-GridView,因为它会破坏此处的自动化。

答案 1 :(得分:0)

  1. 您可以直接构建对象
    1. 你应该是没有统一的平均值或丢失的存储值(统一用于打印,存储总是没有统一 - >如果你想要使用这个值的一天不需要重新分割这个字符串)
    2. 无需传递数组,在输出上编写对象并使用管道
  2. 试试这个:

    Get-Content "c:\temp\servers.txt" |  %{
    
        if (Test-Connection $_ -Count 1 -ea 0 -Quiet)
        {
             $test = Test-Connection -ComputerName $_ -Count 4 -ErrorAction SilentlyContinue 
    
             [pscustomobject]@{
             ServerName=$_
             Results="Online"
             TimeStamp=Get-Date
             Avg=($test | Measure-Object -Property ResponseTime -Average).Average
             PercentLost=100*(4-$test.Count)/4
             }
        } 
        else 
        { 
             [pscustomobject]@{
             ServerName=$_
             Results="Down"
             TimeStamp=Get-Date
             Avg=$null
             PercentLost=$null
             }
        } 
    
    } | export-csv "c:\temp\resultstats.csv" -notype