Это медленно, потому что сценарий должен найти все имена всех видео, прежде чем он может выбрать случайный. Поиск всех этих файлов занимает время. Я не могу придумать простой способ обойти это.
Однако вы могли бы сделать пару сценариев. Первый создает список видеофайлов и помещает его в файл ("videos.txt"):
$formats = @("*.avi","*.mkv") $dir = Split-Path $MyInvocation.MyCommand.Path gci "$dir\*" -include $formats -recurse | Set-Content .\videos.txt
И второй скрипт выбирает файл из videos.txt и воспроизводит его:
Get-Content .\videos.txt | Get-Random -Count 1 | Invoke-Item
Первый скрипт медленный, но второй быстрый. Возможно, вы могли бы вызвать первый скрипт из планировщика задач Windows, чтобы videos.txt был обновлен.