Вы не можете подключиться к оператору If
, что является основной проблемой, с которой вы столкнулись в последней части вашего вопроса.
Вот что, я думаю, дает вам результат, который вы ищете:
Приведенный ниже цикл просматривает все видео результаты вашего объекта с использованием ForEach-Object
. Затем он использует вашу функцию Convert-TimeString
для преобразования значений длительности каждого элемента в коллекции в строковый формат, который затем может быть преобразован в тип [timestamp].
$allMediaFiles | Where-Object { $_.video_audio -eq "video" } | ForEach-Object {
if ($_.Duration -match "M") {
$_.Duration = [TimeSpan](Convert-TimeString -Time $_.Duration -Format 'm\Ms\.fff\S')
}
else {
$_.Duration = [TimeSpan](Convert-TimeString -Time $_.Duration -Format "h\:mm\:ss")
}
}
В следующем примере используется Measure-Object
суммировать свойство TotalSeconds
свойств типа now [timestamp]
в вашей коллекции, которое возвращает как целое общее значение общих миллисекунд для ваших длительностей. Чтобы вернуть их в формат времени, мы используем New-TimeSpan
для этого результата:
$Result = New-TimeSpan -Seconds ($allMediaFiles.Duration | Measure-Object -Property TotalSeconds -Sum).Sum
Затем, чтобы отобразить как чч: мм: сс, мы можем просто использовать .tostring()
, чтобы снова превратить его в строка:
$Result.ToString()