$base = 'https://r2.yosseferrazik.com' $t = $env:R2_TOKEN if (-not $t) { $s = Read-Host 'Token' -AsSecureString $t = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($s)) } $h = @{ 'X-Access-Token' = $t } try { $files = @(Invoke-RestMethod "$base/?list" -Headers $h | ForEach-Object { $_ }) } catch { Write-Host 'Token incorrecto' -ForegroundColor Red; return } if (-not $files) { Write-Host 'Bucket vacio'; return } for ($i = 0; $i -lt $files.Count; $i++) { '{0,3} {1} ({2:N0} KB)' -f ($i + 1), $files[$i].key, ($files[$i].size / 1KB) } $sel = Read-Host 'Numeros separados por coma, o "todos"' $pick = if ($sel -eq 'todos') { $files } else { $sel -split ',' | ForEach-Object { $files[[int]$_.Trim() - 1] } } foreach ($f in $pick) { $dir = Split-Path $f.key if ($dir) { New-Item -ItemType Directory -Force $dir | Out-Null } Invoke-WebRequest ($base + '/' + [uri]::EscapeDataString($f.key)) -Headers $h -OutFile $f.key Write-Host ('OK ' + $f.key) -ForegroundColor Green }