$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
但正如您所看到的,第一列未完全显示
我需要的最重要的事情是每个集成都会立即显示在屏幕上!
答案 0 :(得分:0)
如果您只是想要格式化,可以将Format-Table
与-Wrap
参数一起使用。
但是如果你使用格式表,你将失去对象结构,结果将只是文本,不能导出到CSV文件。
$ collection | Out-GridView | Export-Csv -LiteralPath。\ ServerStatus3.csv -NoTypeInformation
上面的代码行将生成一个空的csv文件。您必须将-Passthru
参数设置为Out-GrifView
,我建议您不要使用Out-GridView
,因为它会破坏此处的自动化。
答案 1 :(得分:0)
试试这个:
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