【发布时间】:2015-06-24 15:05:00
【问题描述】:
我有一个脚本可以 ping 一个 IP 地址并将该信息发送到控制台窗口。在 ping 时间长或错过 ping 的情况下,它也会写入日志。我只想在控制台窗口中保留高 ping 时间和错过的 ping,并允许好的 ping 相互覆盖。这可能吗?
对于高 ping 时间,这是输出(类似的代码用于错过 ping)。
$out = ("{0}ms at $(get-date -format G)" -f $ping.ResponseTime)
write-host $out -foregroundcolor "yellow"
$out >> .\runningPing$ipAddress.txt
对于正常的 ping 时间,输出是这样的。
$out ("{0}ms" -f $ping.ResponseTime)
write-host $out -foregroundcolor "green"
我想让最后一行只为正常 ping 覆盖它自己,但在程序运行时让高和错过的 ping 向上推屏幕。这是我可以在 PS 中做的事情吗?
解决方案 感谢@Mathias R. Jensen,我想出了这个解决方案:
if ($ping.statuscode -eq 0) {
if ($ping.responsetime -gt $waitTime) {
$highPings = $highPings + 1
$out = ("{0}ms at $(get-date -format G)" -f $ping.ResponseTime)
[console]::SetCursorPosition(0,$highPings + $droppedPings + 1)
write-host $out -foregroundcolor "yellow"
$out >> $outFile
}
else {
$out = ("{0}ms $i of $pingCount" -f $ping.ResponseTime)
[console]::SetCursorPosition(0,$highPings + $droppedPings + 2)
write-host $out -foregroundcolor "green"
}
}
else {
$droppedPings = $droppedPings + 1
$out = ("missed ping at $(get-date -format G)")
[console]::SetCursorPosition(0,$highPings + $droppedPings + 1)
write-host $out -foregroundcolor "red"
$out >> $outFile
}
【问题讨论】:
-
简单的解决方案是将
Clear-Host与 if 语句一起使用,或者在与您的 ping 相同的块中使用。那行得通吗?在控制台中,您还可以使用退格键进行花哨的足部操作 -
您想输出类似于旧存档进度条的行,就像旧的
pkzip.exe在Compressing test.dat 2%行中所做的那样,并随着时间的推移用更高的值覆盖该百分比?我对此表示怀疑,Powershell 不喜欢搞乱流。我检查了$h=[char]8(Ctrl+H,一个退格键),不,输出这并没有改变字符串的前一部分,所以在 Powershell 自己的窗口中可能是不可能的。 -
@Matt clear-host 也会清除旧的警告信息,所以不要掷骰子。
-
您可以使用
[console]::SetCursorPosition($x,$y)来完成此操作,但我更喜欢使用Write-Progress的 briantist 解决方案,而不是摆弄控制台光标 -
@MathiasR.Jessen 这正是我所需要的。我使用我一直在跟踪丢弃和高 ping 的计数器将光标向下推到适当的行数。我暂时遇到了在最后一个高点或错过 ping 的顶部写好的 ping 的问题,但除此之外它工作得很好。谢谢