Cómo borrar sólo ciertos contenidos de la pantalla?

votos
42
Function Test{
    while($true){
    write-host I want this to refresh every time
    Start-Sleep -Seconds 4
    cls
    }
}
Write-Host I want this to be at the screen always
Test

¿Hay una manera para mí para hacer esto que no sea poner también dentro del bucle o función? En el código real Quiero mantener una cierta salida en la parte superior de la pantalla para referencia (que no se puede poner dentro de la función), mientras que la función tira algunos datos y actualizar cada 4 segundos. Aquí desde que uso clsse aclara todo en la pantalla, que yo no quiero que suceda. Sólo tiene que limpiar la salida de la función.

Publicado el 25/07/2016 a las 18:15
por usuario
En otros idiomas...                            


2 respuestas

votos
1

Sería una barra de progreso adecuado? El porcentaje real puede no ser relevante porque el bucle en el ejemplo es infinita, pero se comporta similar a lo que usted describe:

Function Test{
   while ($true) {
      Write-Progress -Activity "I want this to be at the screen always" -Status "I want this to refresh every time"
      Start-Sleep -Seconds 4
   }
}
Write-Progress -Activity "I want this to be at the screen always"
Test
Respondida el 25/07/2016 a las 19:30
fuente por usuario

votos
0

Si Write-Progress no es adecuado entonces una función utilizando variables globales podría funcionar para usted:

Function Clear-HostCustom ($DisplayText)
{
    If ($DisplayText)
    {
        $global:DisplayTextGlobal = $DisplayText
    }
    Clear-Host
    Write-Host $global:DisplayTextGlobal
}
Function Test{
    while($true){
    write-host "I want this to refresh every time"
    Start-Sleep -Seconds 4
    Clear-HostCustom
    Start-Sleep -Seconds 1
    }
}
Clear-HostCustom "I want this to be at the screen always"
Test
Respondida el 25/07/2016 a las 22:21
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more