Почему бы не сделать это прямо так:
$StartDate = (Get-Date).AddDays(-1).AddMinutes(-15).AddSeconds(-3)
$EndDate = Get-Date
$Duration = New-TimeSpan -Start $StartDate -End $EndDate
$Day = switch ($Duration.Days) {
0 { $null; break }
1 { "{0} Day," -f $Duration.Days; break }
Default {"{0} Days," -f $Duration.Days}
}
$Hour = switch ($Duration.Hours) {
#0 { $null; break }
1 { "{0} Hour," -f $Duration.Hours; break }
Default { "{0} Hours," -f $Duration.Hours }
}
$Minute = switch ($Duration.Minutes) {
#0 { $null; break }
1 { "{0} Minute," -f $Duration.Minutes; break }
Default { "{0} Minutes," -f $Duration.Minutes }
}
$Second = switch ($Duration.Seconds) {
#0 { $null; break }
1 { "{0} Second" -f $Duration.Seconds; break }
Default { "{0} Seconds" -f $Duration.Seconds }
}
"Duration: $Day $Hour $Minute $Second"
Вывод будет:
Duration: 1 Day, 0 Hours, 15 Minutes, 3 Seconds
С 2 в каждой части продолжительности ...
$StartDate = (Get-Date).AddDays(-2).AddHours(-2).AddMinutes(-2).AddSeconds(-2)
результат будет следующим:
Duration: 2 Days, 2 Hours, 2 Minutes, 2 Seconds
Конечно, вы должны заключить это в функцию, если она вам нужна более одного раза. ; -)
И, конечно, вы можете добавить более сложные условия, если хотите.