Como limpar apenas determinados conteúdos da tela?

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

Existe uma maneira para eu conseguir este feito que não colocá-lo também dentro do loop ou função? No código real eu quero manter alguma saída no topo da tela para a referência (que não pode ser colocado dentro da função), enquanto a função puxa alguns dados e atualizar a cada 4 segundos. Aqui desde que eu uso clsele limpa tudo na tela que eu não quero que aconteça. Eu só precisa limpar a saída da função.

Publicado 25/07/2016 em 21:15
usuário
Em outras línguas...                            


2 respostas

votos
1

Seria uma barra de progresso ser adequado? A percentagem real pode não ser relevante porque o loop no exemplo é infinito, mas se comporta semelhante ao que você descreve:

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
Respondeu 25/07/2016 em 22:30
fonte usuário

votos
0

Se Write-Progress não é adequado, em seguida, uma função usando variáveis ​​globais pode funcionar para você:

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
Respondeu 26/07/2016 em 01:21
fonte usuário

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