Powershell Laufzeit Funktion
Moin,
ich habe eine Powershell Funktion die für mich die Laufzeit eines Scriptes zeigt.
Wenn ich mein Script laufen lasse z. B. 29 Sekunden kommt auch ein Korrektes Ergebnis.
Wenn ich es mit 30 Sekunden laufen Lasse:
30 Sekunden sind doch weniger als 1 Minute?
Getestet mit Windows 10 Pro und macOS 13 (Powershell 7.3)
Hier mein Code:
ich habe eine Powershell Funktion die für mich die Laufzeit eines Scriptes zeigt.
Wenn ich mein Script laufen lasse z. B. 29 Sekunden kommt auch ein Korrektes Ergebnis.
gelaufenezeit_SEK: 29,001576
Minuten: 0
SEKUNDEN_REST: 29,001576
Auftrag nach 29,00 Sek. erledigt....
gelaufenezeit_SEK: 30,001482
Minuten: 1
SEKUNDEN_REST: -29,998518
Auftrag nach 30,00 Sek. erledigt....
30 Sekunden sind doch weniger als 1 Minute?
Getestet mit Windows 10 Pro und macOS 13 (Powershell 7.3)
Hier mein Code:
function timepost{
$gelaufenezeit_SEK = ($stop - $start).TotalSeconds
'gelaufenezeit_SEK: {0}' -f $gelaufenezeit_SEK
$MINUTEN = [INT]($stop - $start).TotalMinutes
'Minuten: {0}' -f $MINUTEN
$SEKUNDEN_REST = (($stop - $start).TotalSeconds - ($MINUTEN*60))
'SEKUNDEN_REST: {0}' -f $SEKUNDEN_REST
If (($stop - $start).TotalSeconds -ge 60){
$MINUTEN = [INT]($stop - $start).TotalMinutes
$SEKUNDEN_REST = (($stop - $start).TotalSeconds - ($MINUTEN*60))
$MINSEK = "Min."
Write-Host -BackgroundColor Black -ForegroundColor Green ('Auftrag nach {0}:{1} {2} erledigt....' -f $MINUTEN, [INT]$SEKUNDEN_REST, $MINSEK)
}
Else {
$MINSEK = "Sek."
Write-Host -BackgroundColor Black -ForegroundColor Green ('Auftrag nach {0:0.00} {1} erledigt....' -f $gelaufenezeit_SEK, $MINSEK)
}
}
$start = (get-date)
Start-Sleep -Seconds 30
$stop = (get-date)
timepost
Please also mark the comments that contributed to the solution of the article
Content-ID: 4663291955
Url: https://administrator.de/contentid/4663291955
Printed on: December 12, 2024 at 02:12 o'clock
3 Comments
Latest comment
Moin,
Wandelst du das einfach nur in [int] um, wird natürlich auf 1 aufgerundet.
Daher:
Allerdings die Frage: Wieso nimmst du nicht statt TotalMinutes einfach Minutes und statt TotalSeconds dann einfach Seconds - so brauchst du auch nicht mehr zu rechnen.
Siehe auch die Beispiele in der Hilfe zu New-TimeSpan
Gruß Thomas
Zitat von @micneu:
Wenn ich mein Script laufen lasse z. B. 29 Sekunden kommt auch ein Korrektes Ergebnis.
Wenn ich es mit 30 Sekunden laufen Lasse:
30 Sekunden sind doch weniger als 1 Minute?
.TotalMinutes wird als Dezimalzahl ausgegeben, bei über 30 Sekunden also >0.5Wenn ich mein Script laufen lasse z. B. 29 Sekunden kommt auch ein Korrektes Ergebnis.
Wenn ich es mit 30 Sekunden laufen Lasse:
30 Sekunden sind doch weniger als 1 Minute?
Wandelst du das einfach nur in [int] um, wird natürlich auf 1 aufgerundet.
Daher:
$MINUTEN = [Math]::Floor(($stop - $start).TotalMinutes)
Allerdings die Frage: Wieso nimmst du nicht statt TotalMinutes einfach Minutes und statt TotalSeconds dann einfach Seconds - so brauchst du auch nicht mehr zu rechnen.
Siehe auch die Beispiele in der Hilfe zu New-TimeSpan
$stop - $start | Select Days,Hours,Minutes,Seconds | Format-List
Gruß Thomas
Nur falls es nicht bekannt sein sollte
Measure-Command
Measure-Command