2012-01-05 15 views

risposta

13
PS> $ts = New-TimeSpan -Seconds 1234567 
PS> '{0:00}:{1:00}:{2:00}' -f $ts.Hours,$ts.Minutes,$ts.Seconds 
06:56:07 

o

PS> "$ts" -replace '^\d+?\.' 
06:56:07 
+1

Grazie mille Shay! Ho finito per fare il seguente: $ iniziano = (get-date) write-host "Script iniziato a $ start" for ($ i = 1; $ i -LT 5; $ i ++) {get processo | out-null sonno 1 echo "Il mio script goes here Lasciatemi contare a 5 per voi:. $ i" } $ finale = (Get-Date) $ periodo = new-periodo -seconds $ (($ end- $ start) .totalseconds) $ trascorso = '{0:00} h: {1:00} m: {2:00} s' -f $ timespan.Ore, $ timespan.Minutes, $ timespan. Secondi scrivere-host "Tempo: $ trascorso" – Sune

+0

(il commento è leggibile?) – Sune

+2

Sì, in pratica si ottiene la data di inizio e di fine e si sottrae l'una forma, il risultato è un oggetto temporizzato che è possibile formattare utilizzando -f operatore (es. $ timespan = $ start- $ end; '{0:00}: {1:00}: {2:00}' -f $ ts.Hours, $ ts.Minutes, $ ts.Seconds) . –

7

Tutto quello che dovete fare è utilizzare il Measure-Command cmdlet per ottenere il tempo:

PS > measure-command { sleep 5} 


Days    : 0 
Hours    : 0 
Minutes   : 0 
Seconds   : 5 
Milliseconds  : 13 
Ticks    : 50137481 
TotalDays   : 5.80294918981481E-05 
TotalHours  : 0.00139270780555556 
TotalMinutes  : 0.0835624683333333 
TotalSeconds  : 5.0137481 
TotalMilliseconds : 5013.7481 

L'uscita di sopra di sé potrebbe essere abbastanza buono per voi, o può formattarlo in modo appropriato poiché l'output di Measure-Command è un oggetto TimeSpan. Oppure puoi usare ToString:

PS > (measure-command { sleep 125}).tostring() 
00:02:05.0017446 
+0

Ottima risposta. Ho avuto questo stesso problema e .toString() era perfetto. Per me era meglio che analizzare ogni valore temporale dal comando measure-measure o convertire i tipi di tempo. Grazie! – tresstylez

Problemi correlati