Zum Inhalt wechseln


Foto

Powershell Countdowntimer


  • Bitte melde dich an um zu Antworten
5 Antworten in diesem Thema

#1 Kuddel071089

Kuddel071089

    Senior Member

  • 310 Beiträge

 

Geschrieben 08. März 2017 - 09:48

Hallo zusammen,

 

ich habe mir für ein Skript einen Countdwn gebaut, der jewiels ein Anzahl an Sekunden herunterzählt.

 

Diesen habe ich jetzt auf MInuten umgebaut und würde gerne die letzten Minute wiederum in Sekunden runterzählen.

 

Klappt nur leider nicht:

#Wartezeit von 5 Minuten
$waitMinutes = 5
$waitMinutes..0 | Foreach-Object {
cls
Write-Host "Wartezeit:" -ForegroundColor Yellow -NoNewline
Write-Host " $_" -ForegroundColor Red -NoNewline
Write-Host " Minuten" -ForegroundColor Yellow -NoNewline
Start-Sleep -Seconds 60

if($_ -eq 1) {
$waitSeconds = 60
$waitSeconds..0 | Foreach-Object {
cls
    Write-Host "Wartezeit:" -ForegroundColor Yellow -NoNewline
    Write-Host " $_" -ForegroundColor Red -NoNewline
    Write-Host " Sekunden" -ForegroundColor Yellow -NoNewline
    Start-Sleep -Seconds 1}
}
}

Hat jemand eine Idee wo der Fehler ist ?

 

Am besten wäre natürlich, wenn die Zeit in Minuten und Sekunden heruntergezählt wird:
Wartezeit 5:45 zb. Aber das ist sicher noch schwerer umsetzbar

 

 

Danke schon einmal


Bearbeitet von Kuddel071089, 08. März 2017 - 10:10.


#2 BOfH_666

BOfH_666

    Junior Member

  • 132 Beiträge

 

Geschrieben 08. März 2017 - 11:15

geht alles ... probier ma das hier

$Start = Get-Date
$Duration = New-TimeSpan -Minutes 5
Do{
    Start-Sleep -Seconds 1
    $ElapsedTime = New-TimeSpan -Start $Start -End $(Get-Date)
    $Time = "{0:D2}:{1:D2}" -f $ElapsedTime.Minutes,  $ElapsedTime.Seconds
    Write-Progress $Time 
}
While((Get-date) -lt ($Start + $Duration))


live long and prosper!

PS:> (79,108,97,102|%{[char]$_})-join''

#3 Kuddel071089

Kuddel071089

    Senior Member

  • 310 Beiträge

 

Geschrieben 08. März 2017 - 11:39

 

geht alles ... probier ma das hier

$Start = Get-Date
$Duration = New-TimeSpan -Minutes 5
Do{
    Start-Sleep -Seconds 1
    $ElapsedTime = New-TimeSpan -Start $Start -End $(Get-Date)
    $Time = "{0:D2}:{1:D2}" -f $ElapsedTime.Minutes,  $ElapsedTime.Seconds
    Write-Progress $Time 
}
While((Get-date) -lt ($Start + $Duration))

Geht das ganze auch Rückwärts ? Jetzt wird ja von 0 bis 5 Minuten gezählt.

Ich hätte aber gern von 5 bis 0 Minuten



#4 NilsK

NilsK

    Expert Member

  • 12.328 Beiträge

 

Geschrieben 08. März 2017 - 11:52   Lösung

Moin,

$Start = Get-Date
$Duration = New-TimeSpan -Minutes 5
$End = $Start + $Duration
Do{
    Start-Sleep -Seconds 1
    $DisplayTime = New-TimeSpan -Start $(Get-Date) -End $End
    $Time = "{0:D2}:{1:D2}" -f ($DisplayTime.Minutes),  ($DisplayTime.Seconds)
    Write-Progress $Time 
}
While((Get-date) -lt $End)

Gruß, Nils


Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#5 4077

4077

    Senior Member

  • 371 Beiträge

 

Geschrieben 08. März 2017 - 11:57

Und im Ursprungsskript wäre es so zu ändern (quick and dirty):

if($_ -gt 1) {
$waitSeconds = 60
$waitSeconds..0 | Foreach-Object {
cls
    Write-Host "Wartezeit:" -ForegroundColor Yellow -NoNewline
    Write-Host " $_" -ForegroundColor Red -NoNewline
    Write-Host " Sekunden" -ForegroundColor Yellow -NoNewline
    if($_ -eq 0)
    {Write-Host "fertig" -ForegroundColor Green
     break
    }
    else {Write-Verbose "nix zu tun"}
    Start-Sleep -Seconds 1}
}
else {Write-Verbose "nix zu tun"}
}

Bearbeitet von 4077, 08. März 2017 - 11:57.


#6 Kuddel071089

Kuddel071089

    Senior Member

  • 310 Beiträge

 

Geschrieben 08. März 2017 - 12:03

Moin,

$Start = Get-Date
$Duration = New-TimeSpan -Minutes 5
$End = $Start + $Duration
Do{
    Start-Sleep -Seconds 1
    $DisplayTime = New-TimeSpan -Start $(Get-Date) -End $End
    $Time = "{0:D2}:{1:D2}" -f ($DisplayTime.Minutes),  ($DisplayTime.Seconds)
    Write-Progress $Time 
}
While((Get-date) -lt $End)

Gruß, Nils

 

Na das sieht doch super aus, vielen Dank :-)