PowerShell外部コマンドを実行するサンプル2「yt-dlp.exe」

powershell コンピュータ
powershell

Webで公開されている動画をローカルに保存する「yt-dlp.exe」という外部コマンドがあります。類似のコマンドは色々ありますが、Webサイトの対応状況がとても優秀です。

このコマンドをタスクスケジューラーを使い1日1回指定時間に実行し、複数の動画を連続ダウンロードするバッチをPowerShellスクリプトで作成してみました。

スクリプト

<#
.SYNOPSIS
 一括で動画ファイルのダウンロードすrスクリプト

.EXAMPLE
PS> d:\ps1\Batch-yt-dlp.ps1

#>

$VideoDir = "e:\videos"
$ComanndPath = "c:\Users\lily\scoop\apps\yt-dlp\current\yt-dlp.exe"
$ArgsPath = "d:\args\yt-dlp.txt"
$LogPath = "d:\log\yt-dlp.log"
$ErrPath = "d:\log\yt-dlp.err"

$tempDir = Get-Location
Set-Location $VideoDir
Get-Content $ArgsPath | ForEach-Object {
    $url = $_
    
    $result = (Start-Process -FilePath $ComanndPath -ArgumentList @($url) -NoNewWindow -PassThru -Wait -RedirectStandardError $ErrPath -RedirectStandardOutput $LogPath)
    if ($result.ExitCode -ne 0) {
        Exit 1
    }
}
New-Item -Path $ArgsPath -Force
Set-Location $tempDir

 

今回外部コマンドの実行は「Start-Process」コマンドレットを使ってみました。

標準出力と標準エラーをログとしてテキストファイルに保存できる点はバッチ処理に向いている思います。ダウンロードするURLは引数のテキストファイルにURLを改行で並べると一括処理するようにしています。スクリプト終了後、引数のテキストファイルは空になります。

Start-ProcessにPassThruオプションをつけるとオブジェクトが返されます。そのオブジェクトのプロパティでExitCodeを調べることでStart-Processで実行した外部コマンドが正常終了したか確認することが出来ます。

現在ファイルサーバーとして稼働しているCeleron N4000が搭載されたPCで実行しています。引数のURLをセットするテキストファイル、ログ、ダウンロードした動画ファイルは共有フォルダに配置し、別PCからダウンロードの依頼及び視聴が出来るようになっています。

関連リンク

スクリプトを実行しているPC

PowerShellスクリプトのタスクスケジュールの登録方法

コメント