Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 是否可以将后续信息输出到同一行_Powershell_Powershell 4.0 - Fatal编程技术网

Powershell 是否可以将后续信息输出到同一行

Powershell 是否可以将后续信息输出到同一行,powershell,powershell-4.0,Powershell,Powershell 4.0,我有一个脚本,可以ping一个ip地址并将该信息发送到控制台窗口。如果ping次数高或ping丢失,也会将其写入日志。我想在控制台窗口中只保留高ping次数和错过的ping,并允许好的ping相互覆盖。可能吗 对于高ping次数,这是输出(类似代码用于错过的ping) 对于正常的ping时间,输出如下 $out ("{0}ms" -f $ping.ResponseTime) write-host $out -foregroundcolor "green" 我想让最后一行只覆盖正常ping,但让

我有一个脚本,可以ping一个ip地址并将该信息发送到控制台窗口。如果ping次数高或ping丢失,也会将其写入日志。我想在控制台窗口中只保留高ping次数和错过的ping,并允许好的ping相互覆盖。可能吗

对于高ping次数,这是输出(类似代码用于错过的ping)

对于正常的ping时间,输出如下

$out ("{0}ms" -f $ping.ResponseTime)
write-host $out -foregroundcolor "green"
我想让最后一行只覆盖正常ping,但让高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    
  }

我认为您应该使用
编写进度
进行良好的ping。您不需要给出百分比,您可以使用
-Status
参数仅显示最后一个好的百分比

下面是我编写的一个小示例,它可能会演示它的外观/操作(您可以自己执行它来查看,它不会ping任何东西,只是一个模拟):

$goods=0
0..100 | % {
如果((随机-最小0-最大100)-ge 50){
$goods+=1
写入进度-活动测试-状态“上次良好ping:$\($good total good pings)”
}否则{
写入警告“坏ping”
}
开始睡眠-秒1
}

在这种情况下,您甚至可以计算出良好ping的百分比,并将其用于
编写进度
,但我想表明,您不需要将其用作进度条,这样它才有用。

我认为您应该使用
编写进度
进行良好ping。您不需要给出百分比,您可以使用
-Status
参数仅显示最后一个好的百分比

下面是我编写的一个小示例,它可能会演示它的外观/操作(您可以自己执行它来查看,它不会ping任何东西,只是一个模拟):

$goods=0
0..100 | % {
如果((随机-最小0-最大100)-ge 50){
$goods+=1
写入进度-活动测试-状态“上次良好ping:$\($good total good pings)”
}否则{
写入警告“坏ping”
}
开始睡眠-秒1
}
在这种情况下,您甚至可以计算出良好ping的百分比,并在
编写进度中使用它,但我想表明,您不需要将其用作进度条,它才有用。

有更好的方法来实现这一点,但我一直在尝试,并提出了这一点。它不会在ISE中工作,但应该在PowerShell控制台上完成它的工作。它使用
“`b”
,这是退格字符,因此文本将在控制台主机写入时覆盖自身。可能对您没有帮助,但可能对其他人有用

开关($ping.ResponseTime){
{$\ge 0-和$\le 100}{
$out=“{0}ms”-f$_
$options=@{ForegroundColor=“Green”;NoNewline=$true}
$backup=“`b”*$out.Length
}
{$\ge 500-和$\le 900}{
$out=“{0}ms at$(获取日期-格式G)”-f$_
$options=@{ForegroundColor=“Yellow”;NoNewline=$false}
$backup=“`n”
}
}
写入主机“$backup$out”@选项
使用
开关
根据ping时间范围设置选项。设置一个小散列表,该散列表将散列到
写入主机
。虽然不完美,但它展示了另一种方法

同样,这样做主要是为了好玩

有更好的方法来解决这个问题,但我一直在玩,也想出了这个办法。它不会在ISE中工作,但应该在PowerShell控制台上完成它的工作。它使用
“`b”
,这是退格字符,因此文本将在控制台主机写入时覆盖自身。可能对您没有帮助,但可能对其他人有用

开关($ping.ResponseTime){
{$\ge 0-和$\le 100}{
$out=“{0}ms”-f$_
$options=@{ForegroundColor=“Green”;NoNewline=$true}
$backup=“`b”*$out.Length
}
{$\ge 500-和$\le 900}{
$out=“{0}ms at$(获取日期-格式G)”-f$_
$options=@{ForegroundColor=“Yellow”;NoNewline=$false}
$backup=“`n”
}
}
写入主机“$backup$out”@选项
使用
开关
根据ping时间范围设置选项。设置一个小散列表,该散列表将散列到
写入主机
。虽然不完美,但它展示了另一种方法


同样,这样做主要是为了好玩

正如我在评论中提到的,光标位置可以通过以下方法控制:

[control]::SetCursorPosition([int]$x,[int]$y)
[console]
类型加速器指向同一个类,该类使您能够在C#console应用程序中将
WriteLine()
写入控制台。如果您愿意,还可以控制颜色和其他控制台行为:

Clear-Host
[console]::ForegroundColor = "Red"
1..10|%{
    [console]::SetCursorPosition(2+$_,$_-1)
    [console]::WriteLine("Hello World!")
}
[console]::ForegroundColor = "Green"

正如我在评论中提到的,光标位置可以通过以下方法控制:

[control]::SetCursorPosition([int]$x,[int]$y)
[console]
类型加速器指向同一个类,该类使您能够在C#console应用程序中将
WriteLine()
写入控制台。如果您愿意,还可以控制颜色和其他控制台行为:

Clear-Host
[console]::ForegroundColor = "Red"
1..10|%{
    [console]::SetCursorPosition(2+$_,$_-1)
    [console]::WriteLine("Hello World!")
}
[console]::ForegroundColor = "Green"

简单的解决方案是使用带有if语句的
Clear Host
,或者在ping的同一块中。这样行吗?在console中,您还可以使用Backspaces进行奇特的步法。您是否希望输出一行类似于旧archivers进度条的内容,如旧的
pkzip.exe
压缩test.dat.2%
的行中所做的,并随时间用更高的值覆盖该百分比?我对此表示怀疑,Powershell不喜欢干扰流。我已经用
$h=[char]8
(Ctrl+h,一个退格)进行了检查,结果为否,输出该字符串并没有改变字符串的前一部分,因此在Powershell自己的窗口中可能无法执行该操作。@Matt clear ho