Hoe kan ik alleen bepaalde inhoud van het scherm te wissen?

stemmen
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

Is er een manier voor mij om dit anders dan zetten het ook in de lus of functie voor elkaar te krijgen? In de eigenlijke code wil ik enkele uitgang aan de bovenkant van het scherm referentie (kan niet binnen de functie worden gezet) te houden, terwijl de functie trekt bepaalde gegevens en elke 4 seconden vernieuwen. Hier omdat ik gebruik clsklaart alles op het scherm die ik niet willen dat er gebeurt. Ik moet alleen de uitvoer van de functie te wissen.

De vraag is gesteld op 25/07/2016 om 21:15
user
In andere talen...                            


2 antwoorden

stemmen
1

Zou een voortgangsbalk geschikt? De werkelijke percentage mag niet relevant zijn, omdat de lus in het voorbeeld is oneindig, maar het gedraagt ​​vergelijkbaar met wat je te beschrijven:

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
antwoordde op 25/07/2016 om 22:30
bron van user

stemmen
0

Als Write-Progress is niet geschikt dan een functie met behulp van globale variabelen zou kunnen werken voor u:

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
antwoordde op 26/07/2016 om 01:21
bron van user

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