¿Cómo capturar/grabar/descargar múltiples URL de transmisión de audio con un cmd o un script de PowerShell?

¿Cómo capturar/grabar/descargar múltiples URL de transmisión de audio con un cmd o un script de PowerShell?

Windows 10 de 64 bits.

¿Cómo capturar/grabar/descargar múltiples URL de transmisión de audio con un cmd o un script de PowerShell?

Capturo 15 transmisiones de audio .mp3 de 15 servidores durante una hora todas las noches usando un lote de cmd. Revisé wget, ffmpeg, vlc y curl. Mi secuencia de comandos produce resultados poco confiables, solo un día de cada siete se capturan las 15 transmisiones durante una hora. Curl es el más confiable. Abro una instancia de curl para cada secuencia.

start "" /min %windir%\curl.exe.lnk http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_q -o "%temp%\bbc1.mp3" 

Probé PowerShell esta noche y falló. Lentamente la mitad de las 15 instancias de PowerShell se cerraron solas y la otra mitad no se capturó durante una hora.

start "" /min "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.lnk" -Command "(new-object net.webclient).DownloadFile('http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_q', '%temp%\bbc1.mp3')"

Pensé que capturar 15 transmisiones en una instancia de PowerShell podría ser mejor, pero la segunda transmisión nunca se inicia porque la primera nunca termina.

$Urls = @()
$Urls += "http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_q"  
$Urls += "http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio3_mf_q"

$OutPath = "$env:temp\"

ForEach ( $item in $Urls) {
$file = $OutPath +  ($item).split('/')[-1] + ".mp3"
(New-Object System.Net.WebClient).DownloadFile($item, $file)
}

Cuatro horas de bing y google no produjeron respuesta.

¿Cómo capturar/grabar/descargar streaming de audio desde la línea de comando?

No estoy atrapado en PowerShell o Curl. Los únicos requisitos son que se ejecute en Windows 10 de 64 bits, capture las 15 transmisiones de manera confiable y se pueda ejecutar sin interacción del usuario.

Respuesta1

Windows 10 de 64 bits. No requiere privilegios de administrador.

Cómo capturar/grabar/descargar múltiples URL de transmisión de audio con un cmd o un script de PowerShell usando streamripper v1.64.6,dormir, PowerShell 5.1 (System.Net.WebClient DescargarFileAsync), curl v.7.55.1 y ffmpeg v.3.4. Las transmisiones de audio se sirven de muchas maneras; no es una buena idea depender de un solo método para capturarlas.

Estoy teniendo mucho éxito con cmd,destripador de corrientesv.1.64.6 y ffmpeg v.3.4.

Stop-process se utiliza para eliminar ffmpeg y curl para escribir la descarga en un archivo.

Puede escuchar las transmisiones mientras se descargan con Windows Media Player. La longitud de los metadatos no siempre se mostrará correctamente.

ffmpeg se puede utilizar para realizar una gran cantidad de procesamiento posterior, como escribir metadatos y recortar. Cambie la ruta a ffmpeg y curl. streamripper, System.Net.WebClient y curl sobrescriben de forma predeterminada. Configuré ffmpeg para que sobrescribiera.

Estos scripts se descargan durante 30 segundos.

Usando cmd, streamripper y ffmpeg: cuando streamripper pierde su conexión, cambia el nombre del archivo original y comienza la captura nuevamente. Este lote concatena los archivos. Streamripper capturará al menos transmisiones de iheart, tunein, streamguys, streamtheworld, radiojar, abacast y limelight. Como siempre, escriba sus comandos para start "" streamripper.exe.lnkevitar pausas.

Las URL de transmisión cambian. Escribí una página que puede ayudar a encontrar una URL de transmisión.Cómo encontrar una URL de transmisión de iheart.

# How to simultaneously, concurrently, in one instance of cmd capture / record / download multiple audio streams
# Windows 10 64-bit. cmd, sleep, streamripper v.1.64.6 and ffmpeg v.3.4. 
# https://superuser.com/posts/1510596/how-to-simultaneously-concurrently-in-one-instance-of-powershell-capture-multi 
# Streamripper overwrites by default. I set ffmpeg to overwrite.
START "" /min "streamripper.exe.lnk" https://ample.revma.ihrhls.com/zc1269 -A -a ALICE3 -d "%cd%" -l 30 -u "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" --quiet
sleep 5
START "" /min "streamripper.exe.lnk" http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_q -A -a BBC13 -d "%cd%" -l 30 -u "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11" --quiet
sleep 1
title DELAY WHILE  STREAMRIPPER COMPLETES IT'S TASKS. 
echo. 
echo    DELAY WHILE STREAMRIPPER COMPLETES IT'S TASKS. 
echo. 
:delaystreamripper
echo    %time%
SET errorlevel=
TASKLIST|FIND /I "streamripper.exe"> nul
IF not ERRORLEVEL 1 (
ping 8.8.8.8> nul
rem change next line. I use 180.
sleep 10 
GOTO :delaystreamripper
)
:concatenate 
dir *).*> NUL 2>&1
IF NOT ERRORLEVEL 1 (
SETLOCAL ENABLEDELAYEDEXPANSION
echo. 
echo    DEL *.CUE
del /q *.cue
echo. 
echo    dir /b *^).*
dir /b *^).* 
echo. 
sleep 1 
for /f %%g in ('dir "*).*" ^| find "File(s)"') do SET zcnt1=%%g
rem in different2 (1).aac    g="different2"    h=(1)    and    i=aac    w/o the quotes
for /f "tokens=1,2,3 delims=. " %%g in ('dir /b "*).*"') do (
copy /b /y "%%g (*).%%i" + "%%g.%%i" "%%g.%%i.tmp" 
del /q %%g*.%%i 
) 
for /f %%g in ('dir "*.tmp" ^| find "File(s)"') do SET zcnt2=%%g
for /f "tokens=1,2,3 delims=. " %%g in ('dir /b "*.tmp"') do (
ren %%g.%%h.%%i %%g.%%h 
)
echo. &echo    Concatenate !zcnt1! files with !zcnt2! files: 
SETLOCAL DISABLEDELAYEDEXPANSION    
)
:ffmpeg
sleep 1 
TITLE FFMPEG 
ECHO. 
ECHO    FFMPEG
start "" /min "%windir%\ffmpeg.exe.lnk" -y -i "%cd%\bbc13.mp3" -metadata title="BBC RADIO 1" -metadata artist="HITS. NEW MUSIC." -metadata album="bbc.co.uk/sounds" -metadata album_artist="HITS. NEW MUSIC." -ss 00:01:15 -c copy "%cd%\bbc1.mp3" 
sleep 1 
start "" /min "%windir%\ffmpeg.exe.lnk" -y -i "%cd%\alice3.aac" -acodec libmp3lame -metadata title="ALICE 95.5FM" -metadata artist="alice95.5FM.iheart.com" -metadata album_artist="alice95.5FM.iheart.com" "%cd%\alice.mp3"
rem

Usando Powershell, curl y ffmpeg:

# How to simultaneously, concurrently, in one instance of powershell capture / record / download multiple audio streams? 
# Windows 10 64-bit. Powershell 5.1, curl v.7.55.1 and ffmpeg v.3.4
# https://superuser.com/posts/1510596/how-to-simultaneously-concurrently-in-one-instance-of-powershell-capture-multi 
# System.Net.WebClient and curl overwrite by default. I set ffmpeg to overwrite.
$host.ui.rawui.WindowTitle = $CurrentUser.Name +  "     " +  $(get-date) + "      " +$MyInvocation.MyCommand.Path
#echo. 
write-host "
Capture for 30 seconds. 
$(get-date)
"
write-host "   "$MyInvocation.MyCommand.Path 
$wc = New-Object System.Net.WebClient 
$url = "http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio1_mf_q" 
$output = "$env:userprofile\desktop\bbc1.mp3" 
$wc.DownloadFileAsync($url, $output) 
$wc = New-Object System.Net.WebClient 
$url = "http://bbcmedia.ic.llnwd.net/stream/bbcmedia_radio3_mf_q" 
$output = "$env:userprofile\desktop\bbc3.mp3" 
$wc.DownloadFileAsync($url, $output)
# overwrite 
& "$env:windir\ffmpeg.exe.lnk" -y -i "http://bbcwssc.ic.llnwd.net/stream/bbcwssc_mp1_ws-einws" -c copy "$env:userprofile\desktop\bbc4.mp3"  
& "$env:windir\curl.exe.lnk" http://bbcmedia.ic.llnwd.net/stream/bbcmedia_6music_mf_p -o "$env:userprofile\desktop\bbc62.mp3" 
# set capture time for 30 seconds
start-sleep 30 
# set capture time for 2 minutes
# start-sleep (60*2)
# set capture time for 3 hours
# start-sleep (3600*3)
stop-process -force -name curl 
stop-process -force -name ffmpeg 
# set tags and trim.
Write-Host "
Trim first 15 seconds of bbc62.mp3 is next. Listen to it then press any key to continue. Trimmed file is saved as bbc6.mp3"
cmd /c pause | out-null
& "$env:windir\ffmpeg.exe" -y -i "$env:userprofile\desktop\bbc62.mp3" -metadata title="BBC RADIO 1" -metadata artist="HITS. NEW MUSIC." -metadata album="bbc.co.uk/sounds" -metadata album_artist="HITS. NEW MUSIC." -ss 00:00:15 -c copy "$env:userprofile\desktop\bbc6.mp3" 
remove-item "$env:userprofile\desktop\bbc62.mp3"
exit
#

Búsqueda de Google: utilice curl para descargar transmisiones de audio

Búsqueda de Google: utilice ffmpeg para descargar transmisiones de audio

Búsqueda de Google: utilice ffmpeg para escribir metadatos

Alternativas a System.Net.WebClient: ¿Puede PowerShell ejecutar comandos en paralelo en Stackoverflow?

cómo capturar audio en streaming cómo guardar audio en streaming cómo generar audio en streaming cómo grabar audio en streaming

Respuesta2

Windows 10 de 64 bits, secuencia de comandos PowerShell 5 para copiar/capturar/grabar/guardar/descargar streaming de audio a una unidad flash como .mp3 con streamripper, wget, curl, ffmpeg, el sistema operativo elimina archivos sospechosos, bloquea el escritorio si no hay mouse o actividad del teclado durante X segundos, prohíbe el uso de scripts, el usuario está limitado a los derechos estándar/de usuario y cierra la sesión en una hora. Corta los primeros 3 minutos.

Elimina con fuerza todas las instancias de ffmpeg, wget, curl y streamripper sin preguntar.

El valor predeterminado es una captura de 10 segundos de cuatro transmisiones. Ver $zsegundos.

Pruebe ffmpeg, wget o curl si streamripper no tiene éxito con su transmisión.

<# BEGIN COMMENTS

**This script is written to run at a Window 10 64-bit PC that no one is sitting at. 
Automated keyboard and mouse events to keep PC awake / unlocked. 
See  KEEP PC AWAKE / UNLOCKED**

Windows 10 64-bit, PowerShell 5 script to Rip / Capture / Record / Save / Download 
streaming audio to flash drive as .mp3 with streamripper, wget, curl, ffmpeg, OS 
deletes suspicious files, locks the desktop if there is no mouse or keyboard activity 
for X seconds, prohibits the use of scripts, user is limited to standard / user rights 
and logs you off in one hour. Cut first 3 minutes.

**Forcefully kills every instance of ffmpeg, wget, curl, and streamripper w/o asking.**

**The default is 10 second capture of four streams. See $zseconds**

Try ffmpeg, wget or curl if streamripper does not succeed with your stream.

~2GB of free space on flash drive. Streams are saved to $env:userprofile\
downloads\$ztimestamp and written to flash drive that has 
flashDrive:\DoNotDeleteFlash4291phIr_Wn.txt to directory flashDrive:\downloads\radio 
by ffmpeg. The time to write to flash drive depends on the quality of the system and 
flash drive.

Dependencies:

flashDrive:\DoNotDeleteFlash4291phIr_Wn.txt. Used to find flash drive.
flashDrive:\downloads with 4.txt, 4.txt(FlashDriveLetter).lnk, curl, wget, ffmpeg,
xxmklink, and streamripper. Create shortcuts on the command line with xxmklink.exe 
http://www.xxcopy.com/download/xxmklink.zip.
Copy streamripper files to flashDrive:\downloads\streamripper

If scripts prohibited:
Create shortcut with name: 

4.txt(FlashDriveLetter) i.e. 4.txt(K)     Script creates shortcuts for 23 drive letter.

Target: 

powershell.exe $z=Get-Date -f 'ddhhmmss'; copy 4.txt 4.txt.$z.txt; gc 4.txt|powershell

Run shortcut.

Kill with CMD:

taskkill /f /im ffmpeg.exe& taskkill /f /im wget.exe& taskkill /f /im curl.exe& taskkill /f /im streamripper.exe

Kill with PowerShell:

taskkill /f /im ffmpeg.exe; taskkill /f /im wget.exe; taskkill /f /im curl.exe; taskkill /f /im streamripper.exe

END COMMENTS #>






$zseconds=3060 ; # Rip / Capture / Record / Save / Download     51 minutes all streams.
$zseconds=240 ; # 4 minutes all streams.
$zseconds=10 ; $zdebug=0 ; # 10 seconds 4 streams.

# BEGIN Store script block in variable
$zblock= {
# If not online exit
ping -n 1 8.8.8.8|out-null; 
# if not errorlevel 1 
# if false 
IF (-not $?){Write-Output "
ddhhmmss is $ztimestamp1  Unable to get online.  Terminating script."|out-file $zdrive\downloads\documents\4txtDailyLog.txt -append;
Write-Output "
ddhhmmss is $ztimestamp1  Unable to get online.  Terminating script and exiting in 5 seconds.
";
Start-Sleep 5 ;
exit;
}

# BEGIN Rip / Capture / Record / Save / Download streaming audio

if($zdebug -eq '0'){
# if in debug mode do the following
Write-output "
The time is $((get-date $ztimestamp0 -f 'hh:mm:sstt') -replace ' ','')`n
Recording for $($zseconds/60) minutes     Recording stop $((get-date $ztimestamp0.AddSeconds($zseconds) -f 'hh:mm:sstt') -replace ' ','')      Processing stop ~$((get-date $ztimestamp0.AddSeconds($zseconds+(gc $zdrive\downloads\documents\4txtFFmpegLastTimeTook.txt)) -f hh:mm:sstt) -replace ' ','';)`n 
This is $zdrive\downloads\4.txt`n
Loading ffmpeg, wget, curl and streamripper.`n
The current directory is $pwd";
& $zdrive\downloads\ffmpeg.exe.lnk -y -i "http://listen.xray.fm/stream" -metadata title='KXRY 107.1FM PORTLAND,OR' -metadata artist='xray.fm' -metadata album='PORTLAND, OR' -metadata album_artist='xray.fm' -c copy "$zdrive\downloads\radio\xray2.mp3" ;
start-sleep 1 ;
& $zdrive\downloads\wget.exe.lnk http://listen.xray.fm/stream -O "$env:userprofile\downloads\$ztimestamp1\XRAY3.mp3" ;
start-sleep 1 ;
& $zdrive\downloads\curl.exe.lnk http://stream.live.vc.bbcmedia.co.uk/bbc_6music -o "$env:userprofile\downloads\$ztimestamp1\BBC63.mp3" ;
start-sleep 1 ;
& $zdrive\downloads\streamripper\streamripper.exe.lnk http://ample.revma.ihrhls.com/zc1269 -A -a ALICE3 -d $env:userprofile\downloads\$ztimestamp1\ -l $zseconds -u "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0" ;

} else {


# YOUR STREAMS HERE 


# Capture and process with ffmpeg
$zcut='00:03:00' ;
& $zdrive\downloads\ffmpeg.exe.lnk -y -i "http://listen.xray.fm/stream" -af volume='2.367188' -metadata title='KXRY 107.1FM PORTLAND,OR' -metadata artist='xray.fm' -metadata album='PORTLAND, OR' -metadata album_artist='xray.fm' -ss $zcut "$zdrive\downloads\radio\xray2.mp3" ;
start-sleep 1 ;
& $zdrive\downloads\wget.exe.lnk http://listen.xray.fm/stream -O "$env:userprofile\downloads\$ztimestamp1\XRAY3.mp3" ;
start-sleep 1 ;
& $zdrive\downloads\streamripper\streamripper.exe.lnk http://ample.revma.ihrhls.com/zc1269 -A -a ALICE3 -d $env:userprofile\downloads\$ztimestamp1\ -l $zseconds -u "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0" ;
start-sleep 1 ;
& $zdrive\downloads\curl.exe.lnk http://stream.live.vc.bbcmedia.co.uk/bbc_6music -o "$env:userprofile\downloads\$ztimestamp1\BBC63.mp3" ;
start-sleep 1 ;
}
#    END Rip / Capture / Record / Save / Download streaming audio

# BEGIN Wait for sleep $zseconds and streamripper to finish
start-sleep $zseconds ;
$ProcessList = @("streamripper") ; Do {$ProcessesFound = Get-Process | ? {$ProcessList -contains $_.Name} | Select-Object -ExpandProperty Name ; IF ($ProcessesFound) {Start-Sleep 1}}Until (!$ProcessesFound)
stop-process -name wget -ErrorAction SilentlyContinue ;
stop-process -name curl -ErrorAction SilentlyContinue ;
stop-process -name ffmpeg -ErrorAction SilentlyContinue ;
start-sleep 1 ;
#   END  Wait for sleep $zseconds and streamripper to finish

# BEGIN CONCATENATE. If multiple files of one stream with ( in file name, concatenate them. 
$Files = @(gci "$env:userprofile\downloads\$ztimestamp1\*`(*") ;
IF (!($Files.length -eq 0)) {
Write-Output "Files concatenated..." ;
Write-Output "Files concatenated."|out-file $zdrive\downloads\documents\4txtDailyLog.txt -append ;
gci "$env:userprofile\downloads\$ztimestamp1\*`(*" | foreach-object {
$z="$_" -replace ' \(.\)','' ;
cmd /c copy /b $z + $_ "$z.tmp" ;
remove-item $z ;
rename-item "$z.tmp" $z ;
}
ri "$env:userprofile\downloads\$ztimestamp1\*`(*" ;
start-sleep 1 ;
}
#    END CONCATENATE. If multiple files of one stream with ( in file name, concatenate them. 

# BEGIN FFMPEG
$zprocess = get-date ;
Write-Output "
FFmpeg began at $((Get-Date -f 'hh:mm:sstt') -replace ' : ',':')
" ;
Write-Output "    $((Get-Date -f 'hh:mm:sstt') -replace ' : ',':') FFmpeg begins."|out-file "$zdrive\downloads\documents\4txtDailyLog.txt" -append ;

if($zdebug -eq '0'){
$zcut='00:00:00' ;
& "$zdrive\downloads\ffmpeg.exe.lnk" -y -i "$env:userprofile\downloads\$ztimestamp1\xray3.mp3" -af volume='2.367188' -metadata title='KXRY 107.1FM PORTLAND,OR' -metadata artist='xray.fm' -metadata album='PORTLAND, OR' -metadata album_artist='xray.fm' -ss $zcut "$zdrive\downloads\radio\xray.mp3" ;
start-sleep 1 ; 
& "$zdrive\downloads\ffmpeg.exe.lnk" -y -i "$env:userprofile\downloads\$ztimestamp1\alice3.aac" -acodec libmp3lame -metadata album='IHEARTRADIO.COM' -metadata title='ALICE 95.5FM' -metadata artist='alice95.5FM.iheart.com' -metadata album_artist='alice95.5FM.iheart.com' -ss $zcut "$zdrive\downloads\radio\alice.mp3" ;
start-sleep 1 ; 
& "$zdrive\downloads\ffmpeg.exe.lnk" -y -i "$env:userprofile\downloads\$ztimestamp1\bbc63.mp3" -metadata title='BBC RADIO 6' -metadata artist='ALTERNATIVE.' -metadata album='bbc.co.uk/sounds' -metadata album_artist='ALTERNATIVE.' -ss $zcut -c copy "$zdrive\downloads\radio\bbc6.mp3" ;
start-sleep 1 ; 

} else {

$zcut='00:03:00' ;


# YOUR PROCESSING HERE 


& "$zdrive\downloads\ffmpeg.exe.lnk" -y -i "$env:userprofile\downloads\$ztimestamp1\xray3.mp3" -metadata title='KXRY 107.1FM PORTLAND,OR' -metadata artist='xray.fm' -metadata album='PORTLAND, OR' -metadata album_artist='xray.fm' -ss $zcut -af volume='2.367188' "$zdrive\downloads\radio\xray.mp3" ;
start-sleep 1 ; 
& "$zdrive\downloads\ffmpeg.exe.lnk" -y -i "$env:userprofile\downloads\$ztimestamp1\alice3.aac" -metadata album='IHEARTRADIO.COM' -metadata title='ALICE 95.5FM' -metadata artist='alice95.5FM.iheart.com' -metadata album_artist='alice95.5FM.iheart.com' -ss $zcut -acodec libmp3lame "$zdrive\downloads\radio\alice.mp3" ;
start-sleep 1 ; 
& "$zdrive\downloads\ffmpeg.exe.lnk" -y -i "$env:userprofile\downloads\$ztimestamp1\bbc63.mp3" -metadata title='BBC RADIO 6' -metadata artist='ALTERNATIVE.' -metadata album='bbc.co.uk/sounds' -metadata album_artist='ALTERNATIVE.' -ss $zcut -c copy "$zdrive\downloads\radio\bbc6.mp3" ;
start-sleep 1 ; 
}
#    END FFMPEG

# BEGIN WAIT FOR WRITING TO FLASH DRIVE TO FINISH
write "    Past last FFmpeg. Waiting for all instances of FFmpeg to finish." ;
$ProcessList = @("ffmpeg") ; Do {$ProcessesFound = Get-Process | ? {$ProcessList -contains $_.Name} | Select-Object -ExpandProperty Name ; IF ($ProcessesFound) {Start-Sleep 1}}Until (!$ProcessesFound)
$z=(get-date -f 'hh:mm:ss tt') -replace ' ','' ;
Write-Output "    $z FFmpeg finishes."|out-file $zdrive\downloads\documents\4txtDailyLog.txt -append ;
write "
All instances of FFmpeg have finished. Have all files finished being written to flash drive?
" ;
#    END WAIT FOR WRITING TO FLASH DRIVE TO FINISH

# BEGIN TIME IT TOOK FFMPEG TO PROCESS, COUNT AND FILE SIZE TO LOG
$zprocess = (get-date) - $zprocess ;
[math]::ceiling(($zprocess.totalseconds))|out-file "$zdrive\downloads\documents\4txtFFmpegLastTimeTook.txt" ;
# how to run a command in Write-Output 
Write-Output "    FFmpeg took: $($zprocess.minutes) minutes and $($zprocess.seconds) seconds." | out-file $zdrive\downloads\documents\4txtDailyLog.txt -append ;
$z=gci $zdrive\downloads\radio|measure -property length -sum ;
Write-output "    $($z.Count) streams for $(FileSize $z.Sum)" | out-file "$zdrive\downloads\documents\4txtDailyLog.txt" -append ;
#    END TIME IT TOOK FFMPEG TO PROCESS, COUNT AND FILE SIZE TO LOG

# BEGIN REVERSE APPEND PERMANENT LOGFILE
Write-Output "
Reverse append logfile." ; 
(gc $zdrive\downloads\documents\4txtDailyLog.txt , $zdrive\downloads\documents\4txtPermanentLog.txt) | sc $zdrive\downloads\documents\4txtPermanentLog.txt ; 
Write-Output " " ; # double space between Write-Output and Stop-Transcript in 4.txt.transcript.txt
                     
#    END REVERSE APPEND PERMANENT LOGFILE

Stop-Transcript | out-null ;
#    END START TRANSCRIPT

# BEGIN REVERSE APPEND PERMANENT TRANSCRIPT
Write-Output "
Reverse append transcript." ; 
(gc $zdrive\downloads\4.txt.transcript.txt , $zdrive\downloads\padding.txt , $zdrive\downloads\4.txt.log2.txt) | sc $zdrive\downloads\4.txt.log2.txt ; 
Write-Output " " ; 
#    END REVERSE APPEND PERMANENT TRANSCRIPT

# BEGIN CLEAN UP
stop-process -name cmd -ErrorAction SilentlyContinue ;
# Remove-Variable -name zdebug -ErrorAction SilentlyContinue;
# Clear-Item variable:zdebug -ErrorAction SilentlyContinue;
$z57 | remove-job -force ; # Kill $zblock2: KEEP PC AWAKE / UNLOCKED.
# if(test-path "$env:temp\tmp.txt"){ ri "$env:temp\tmp.txt" } ;
# if(test-path "$env:userprofile\downloads\$ztimestamp1"){ ri "$env:userprofile\downloads\$ztimestamp1" -force -recurse } ;
                                                       
#    END CLEAN UP

explorer $zdrive\downloads\radio\ ; 
POPD ; 

EXIT ;
}
#    END Store script block in variable










# BEGIN Kill every instance of wget, curl, ffmpeg and streamripper w/o asking.
stop-process -name wget -ErrorAction SilentlyContinue ;
stop-process -name curl -ErrorAction SilentlyContinue ;
stop-process -name ffmpeg -ErrorAction SilentlyContinue ;
stop-process -name streamripper -ErrorAction SilentlyContinue ;
#    END Kill every instance of wget, curl, ffmpeg and streamripper w/o asking.

# BEGIN define functions
Function FileSize() {[cmdletbinding()]Param ([long]$Type);If ($Type -ge 1TB) {[string]::Format("{0:0.00} TB", $Type / 1TB)}ElseIf ($Type -ge 1GB) {[string]::Format("{0:0.00} GB", $Type / 1GB)}ElseIf ($Type -ge 1MB) {[string]::Format("{0:0.00} MB", $Type / 1MB)}ElseIf ($Type -ge 1KB) {[string]::Format("{0:0.00} KB", $Type / 1KB)}ElseIf ($Type -gt 0) {[string]::Format("{0:0.00} Bytes", $Type)}}; <# End of function #>
#   END define functions

# BEGIN Flash drive letter to variable i.e. K:
$z=@('D:','E:','F:','G:','H:','i:','J:','K:','L:','M:','N:','O:','P:','Q:','R:','S:','T:','U:','V:','W:','X:','Y:','Z:') ;  
$z|foreach-object{if(test-path $_'\DoNotDeleteFlash4291phIr_Wn.txt'){$zdrive="$_"}} ;
# $zdrive2=$zdrive.trim(':') ; # REMOVE COLON
#   END Flash drive letter to variable i.e. K:

# BEGIN Create shortcut to this file for 23 drive letter one time. 
# Target: powershell.exe $z=Get-Date -f 'ddhhmmss'; copy $zMyCommandName $zMyCommandName.`$z.txt; gc $zMyCommandName|powershell
# Start in: flashdrive:\downloads 
# Run: Minimized
IF(!(test-path "$zdrive\Downloads\4.txt(Z).lnk")) {
$zMyCommandName=$myinvocation.mycommand.name ; # scripts not prohibited
$zMyCommandName='4.txt' ; # scripts prohibited
$z=@('D:','E:','F:','G:','H:','i:','J:','K:','L:','M:','N:','O:','P:','Q:','R:','S:','T:','U:','V:','W:','X:','Y:','Z:') ;  
$z|foreach-object{
$z=$_.trim(':');
$SourceFileLocation = "$env:systemroot\System32\WindowsPowerShell\v1.0\powershell.exe" ;
$ShortcutLocation = "$zdrive\downloads\$zMyCommandName($z).lnk" ;
$WScriptShell = New-Object -ComObject WScript.Shell ;
$Shortcut = $WScriptShell.CreateShortcut($ShortcutLocation) ;
$shortcut.WindowStyle="7" ;
$shortcut.WorkingDirectory="$_\downloads" ;
$Shortcut.TargetPath = "$SourceFileLocation" ;
$Shortcut.IconLocation = "$env:systemroot\System32\WindowsPowerShell\v1.0\powershell.exe,0" ;
$Shortcut.Arguments = "`$z=Get-Date -f 'ddhhmmss'; copy $zMyCommandName $zMyCommandName.`$z.txt; gc $zMyCommandName|powershell" ;
$shortcut;
$shortcut.Save();
}
}
#   END Create shortcut to this file for 23 drive letter one time.

# BEGIN Create timestamp / directory / file
$ztimestamp0=Get-Date ;
$ztimestamp1=Get-Date -f  'ddhhmmss' ;
IF(!(test-path "$zdrive\Downloads\documents")) {ni -ItemType Directory "$zdrive\Downloads\documents" > $null} ;
IF(!(test-path "$zdrive\Downloads\radio")) {ni -ItemType Directory "$zdrive\Downloads\radio" > $null} ;
IF(!(test-path "$zdrive\Downloads\DoNotDelete")) {ni -ItemType Directory "$zdrive\Downloads\DoNotDelete" > $null} ;
IF(!(test-path "$env:userprofile\downloads\$ztimestamp1")) {ni -ItemType Directory "$env:userprofile\downloads\$ztimestamp1" > $null} ;
IF(![System.IO.File]::Exists("$zdrive\downloads\documents\4txtFFmpegLastTimeTook.txt")) {ni -Path "$zdrive\downloads\documents\" -Name "4txtFFmpegLastTimeTook.txt" -ItemType "file" -Value "100" > $null } ;
$zseconds|out-file "$zdrive\downloads\DoNotDelete\6.ps1.DoNotDelete.txt" ; # used by flashdrive:\downloads\6.ps1     Keep PC Awake
#    END Create directory / file 

# BEGIN Possible script prohibited triggers


#    END Possible script prohibited triggers   

# BEGIN WINDOW TITLE
# $MyInvocation does not work with get-content piped to powershell
# https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_automatic_variables
$host.ui.rawui.WindowTitle ="This is 4.txt     Recording for $($zseconds/60) minutes.     Recording stop $((get-date $ztimestamp0.AddSeconds($zseconds) -f 'hh:mm:sstt') -replace ' ','')      Processing stop ~$((get-date $ztimestamp0.AddSeconds($zseconds+(gc $zdrive\downloads\documents\4txtFFmpegLastTimeTook.txt)) -f 'hh:mm:sstt') -replace ' ','')      This is $zdrive\downloads\4.txt" ;
#   END WINDOW TITLE

# CREATE SHORTCUTS
& "$zdrive\downloads\xxmklink" $zdrive\downloads\ffmpeg.exe.lnk "$zdrive\downloads\ffmpeg.exe" `"`" "$zdrive\downloads" `"`" "7" `"`" ;
& "$zdrive\downloads\xxmklink" $zdrive\downloads\wget.exe.lnk "$zdrive\downloads\wget.exe" `"`" "$zdrive\downloads" `"`" "7" `"`" ;
& "$zdrive\downloads\xxmklink" $zdrive\downloads\curl.exe.lnk "$zdrive\downloads\curl.exe" `"`" "$zdrive\downloads" `"`" "7" `"`" ;
& "$zdrive\downloads\xxmklink" $zdrive\downloads\streamripper\streamripper.exe.lnk "$zdrive\downloads\streamripper\streamripper.exe" `"`" "$zdrive\downloads\streamripper" `"`" "7" `"`" ;
# BEGIN works. I have not found a use for it yet
# & "$zdrive\downloads\xxmklink" $zdrive\downloads\6.ps1`($zdrive2`)KeepAwake.lnk "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe $z=Get-Date -f 'ddhhmmss'; copy 6.ps1 6.ps1.$z.txt; gc 6.ps1|powershell" `"`" "$zdrive\downloads" `"`" "7" `"`" ;
#    END works. I have not found a use for it yet

# Initialize 4txtDailyLog.txt
Write-Output "$((Get-Date -f 'ddd MM/dd/yy')) $(((Get-Date -f 'hh:mm:sstt') -replace ' ',''))
This is $env:userprofile on $env:computername running $zdrive\downloads\4.txt
Capturing audio streams with ffmpeg, wget, curl and streamripper.
Recording for $($zseconds/60) minutes.
Recording will end around $((get-date $ztimestamp0.AddSeconds($zseconds) -f 'hh:mm:sstt') -replace ' ','') 
Processing will end around $((get-date $ztimestamp0.AddSeconds($zseconds+(gc $zdrive\downloads\documents\4txtFFmpegLastTimeTook.txt)) -f hh:mm:sstt) -replace ' ','')"|out-file $zdrive\downloads\documents\4txtDailyLog.txt ;

 # BEGIN MINIMIZE ALL WINDOWS minimize window
((New-Object -ComObject Shell.Application).MinimizeAll()) ;
#   END MINIMIZE ALL WINDOWS minimize window                 

# BEGIN KEEP PC AWAKE / UNLOCKED. Sleep, move mouse, write-host, SendKeys.
$zblock2={
$myshell = New-Object -com "Wscript.Shell" ;
while ($true)
{
Start-Sleep -s (Get-Random -Maximum 5 -Minimum 1) ;
$Pos = [System.Windows.Forms.Cursor]::Position ;
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point((($Pos.X) + 1) , $Pos.Y) ;
$Pos = [System.Windows.Forms.Cursor]::Position ;
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point((($Pos.X) - 1) , $Pos.Y) ;
$word = -join ((65..90) + (97..122) | Get-Random -Count (Get-Random -Maximum 8 -Minimum 5) | % {[char]$_})
Write-Host "$word" ;
$myshell.sendkeys(".") ;
} ;
} ; # END ZBLOCK2

$z57=start-job -scriptblock $zblock2 ; 
# write-output "The job parameter id is $($z57.id)";
# $z57|wait-job ;
# $z57|stop-job ;
# $z57|remove-job -force ;

#    END KEEP PC AWAKE / UNLOCKED. Sleep, move mouse, write-host, SendKeys.


# BEGIN START TRANSCRIPT
$ErrorActionPreference="SilentlyContinue" ;
Stop-Transcript | out-null ;
$ErrorActionPreference = "Continue" ;
Start-Transcript -path $zdrive\downloads\4.txt.transcript.txt ;
Write-Output "See 4txtDailyLog.txt and 4txtPermanentLog.txt" ;
#    END START TRANSCRIPT    
  
# Invoke script: Start capturing streams with ffmpeg, wget, curl, streamripper, and ....
& $zblock ; 

# a blank line must follow '& $zblock' 

información relacionada