Como capturar/gravar/baixar vários URLs de streaming de áudio com um script cmd ou PowerShell?

Como capturar/gravar/baixar vários URLs de streaming de áudio com um script cmd ou PowerShell?

Windows 10 de 64 bits.

Como capturar/gravar/baixar vários URLs de streaming de áudio com um script cmd ou PowerShell?

Eu capturo 15 fluxos de áudio .mp3 de 15 servidores por uma hora todas as noites usando um lote cmd. Passei por wget, ffmpeg, vlc e curl. Meu script produz resultados não confiáveis, apenas um dia em sete todos os 15 fluxos são capturados por uma hora. Curl é o mais confiável. Abro uma instância de curl para cada fluxo.

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

Eu tentei o PowerShell esta noite e falhou. Lentamente, metade das 15 instâncias do PowerShell se fecharam e a outra metade não foi capturada por uma 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')"

Achei que capturar 15 streams em uma instância do PowerShell poderia ser melhor, mas o segundo stream nunca é iniciado porque o primeiro stream 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)
}

Quatro horas de bing e google não produziram resposta.

Como capturar/gravar/baixar streaming de áudio da linha de comando?

Não estou preso no PowerShell ou no curl. Os únicos requisitos são que ele seja executado no Windows 10 de 64 bits, capture todos os 15 fluxos de maneira confiável e possa ser executado sem interação do usuário.

Responder1

Windows 10 de 64 bits. Não requer privilégios de administrador.

Como capturar/gravar/baixar vários URLs de streaming de áudio com um script cmd ou PowerShell usando streamripper v1.64.6,dormir, PowerShell 5.1 (System.Net.WebClient DownloadFileAsync), curl v.7.55.1 e ffmpeg v.3.4. Os fluxos de áudio são servidos de várias maneiras; não é uma boa ideia confiar em um único método de captura.

Estou tendo muito sucesso com o cmd,estripador de fluxov.1.64.6 e ffmpeg v.3.4.

O processo Stop é usado para eliminar o ffmpeg e o curl para gravar o download no arquivo.

Você pode ouvir as transmissões enquanto elas são baixadas com o Windows Media Player. O comprimento dos metadados nem sempre será exibido corretamente.

ffmpeg pode ser usado para fazer muitos pós-processamento, como gravar metadados e cortar. Mude o caminho para ffmpeg e curl. streamripper, System.Net.WebClient e curl sobrescrevem por padrão. Eu configurei o ffmpeg para substituir.

Esses scripts são baixados por 30 segundos.

Usando cmd, streamripper e ffmpeg: Quando o streamripper perde a conexão, ele renomeia o arquivo original e inicia a captura novamente. Este lote concatena os arquivos. Streamripper irá capturar fluxos de iheart, tunein, streamguys, streamtheworld, radiojar, abacast e ribalta, pelo menos. Como sempre, escreva seus comandos para start "" streamripper.exe.lnkevitar pausas.

Mudança de URLs de fluxo. Escrevi uma página que pode ajudar a encontrar um URL de stream.Como encontrar um URL de stream 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 e 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
#

Pesquisa Google - Use curl para baixar fluxos de áudio

Pesquisa Google - Use ffmpeg para baixar fluxos de áudio

Pesquisa Google - Use ffmpeg para escrever metadados

Alternativas para System.Net.WebClient: O PowerShell pode executar comandos em paralelo no stackoverflow

como capturar streaming de áudio como salvar streaming de áudio como gerar streaming de áudio como gravar streaming de áudio

Responder2

Windows 10 de 64 bits, script PowerShell 5 para ripar / capturar / gravar / salvar / baixar streaming de áudio para unidade flash como .mp3 com streamripper, wget, curl, ffmpeg, sistema operacional exclui arquivos suspeitos, bloqueia a área de trabalho se não houver mouse ou atividade do teclado por X segundos, proíbe o uso de scripts, o usuário está limitado aos direitos padrão/de usuário e faz logoff em uma hora. Corte os primeiros 3 minutos.

Mata à força todas as instâncias de ffmpeg, wget, curl e streamripper sem perguntar.

O padrão é a captura de 10 segundos de quatro fluxos. Veja $zsegundos.

Experimente ffmpeg, wget ou curl se o streamripper não tiver sucesso com seu stream.

<# 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' 

informação relacionada