Kuddel071089 9 Geschrieben 8. März 2017 Melden Teilen Geschrieben 8. März 2017 (bearbeitet) 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 8. März 2017 von Kuddel071089 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 8. März 2017 Melden Teilen Geschrieben 8. März 2017 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)) Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 8. März 2017 Autor Melden Teilen Geschrieben 8. März 2017 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 Zitieren Link zu diesem Kommentar
Beste Lösung NilsK 2.934 Geschrieben 8. März 2017 Beste Lösung Melden Teilen Geschrieben 8. März 2017 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 Zitieren Link zu diesem Kommentar
4077 30 Geschrieben 8. März 2017 Melden Teilen Geschrieben 8. März 2017 (bearbeitet) 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 8. März 2017 von 4077 Zitieren Link zu diesem Kommentar
Kuddel071089 9 Geschrieben 8. März 2017 Autor Melden Teilen Geschrieben 8. März 2017 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 :-) Zitieren Link zu diesem Kommentar
tdelgreco 0 Geschrieben 21. März 2019 Melden Teilen Geschrieben 21. März 2019 function Start-cpSleepProgressBar { <# .SYNOPSIS This feature is the control of the function Write-Progress Bar simplified. .DESCRIPTION This feature is the control of the function Write-Progress Bar simplified. .EXAMPLE Start-cpSleepProgressBar -Activity "test" -ProgressFlow Increasingly -TimeIn Seconds -Value 10 .EXAMPLE Start-cpSleepProgressBar -Activity "test" -ProgressFlow Decreasing -TimeIn Seconds -Value 10 .EXAMPLE Start-cpSleepProgressBar -Activity "test" -ProgressFlow Increasingly -TimeIn Seconds -Value 10 -ReturnCode .NOTES Create by : T. Del Greco Date : 03.03.2018 #> [CmdletBinding()] [OutputType()] PARAM ( [parameter(Mandatory=$false)][System.String]$Activity = "Please wait.", [parameter(Mandatory=$false)][ValidateSet('Increasingly','Decreasing')][System.String]$ProgressFlow = 'Increasingly', [parameter(Mandatory=$false)][ValidateSet('Hours','Minutes','Seconds')][System.String]$TimeIn = 'Seconds', [parameter(Mandatory=$true)][System.Int32]$Value, [parameter(Mandatory=$false)][System.Boolean]$ReturnCode ) BEGIN { switch ($TimeIn) { 'Seconds' { $SleepSeconds = $Value } 'Minutes' { $SleepSeconds = $Value * 60 } 'Hours' { $SleepSeconds = $Value * 60 * 60 } } } PROCESS { switch ($ProgressFlow) { 'Increasingly' { for($Count=0; $Count -lt $SleepSeconds; $Count++) { Write-Progress -Activity $Activity -Status "Sleeping" -SecondsRemaining $Count -PercentComplete ($Count/$SleepSeconds*100) Start-Sleep -Seconds 1 } } 'Decreasing' { for($Count=$SleepSeconds; $Count -gt 0; $Count--) { Write-Progress -Activity $Activity -Status "Sleeping" -SecondsRemaining $Count -PercentComplete ($Count/$SleepSeconds*100) Start-Sleep -Seconds 1 } } } } END { if ($ReturnCode) { return $true } } } Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.