Ignite has been over for a little while, and I finally have some time on my hands to dive deep. This is the script I use to bring the videos offline for further filtering and to be able to watch the sessions on my own terms.
Download All Sessions in SD Quality
$feedUrl = 'https://s.ch9.ms/Events/Ignite/2016/RSS' [Environment]::CurrentDirectory=(Get-Location -PSProvider FileSystem).ProviderPath function Get-Media { [CmdletBinding()] param ( [Object] $url, [Object] $title ) $u = New-Object System.Uri($url) $name = $title $extension = [System.IO.Path]::GetExtension($u.Segments[-1]) $fileName = $name + $extension $fileName = $fileName -replace "’", '' $fileName = $fileName -replace "\?", '' $fileName = $fileName -replace ":", '' $fileName = $fileName -replace '/', '' $fileName = $fileName -replace ",", '' $fileName = $fileName -replace '"', '' $fileName if (Test-Path($fileName)) { Write-Host 'Skipping file, already downloaded' -ForegroundColor Yellow } else { Invoke-WebRequest $url -OutFile $fileName } } $feed=[xml](New-Object System.Net.WebClient).DownloadString($feedUrl) foreach($i in $feed.rss.channel.item) { foreach($m in $i.group){ foreach($u in $m.content ` | Where-Object { ` $_.url -like '*mid.mp4' ` } | Select-Object -Property @{Name='url'; Expression = {$_.url}}, ` @{Name='title'; Expression = {$i.title}}) { Get-Media -url $u.url -title $u.title } } } # Find and Download Keynotes foreach($i in $feed.rss.channel.item) { foreach($m in $i.group){ foreach($u in $m.content ` | Where-Object { ` $_.url -like '*KEY0*' ` -and $_.type -eq 'video/mp4' ` } ` | Select-Object -Unique ` | Select-Object -Property @{Name='url'; Expression = {$_.url}}, ` @{Name='title'; Expression = {$i.title}}) { Get-Media -url $u.url -title $u.title } } }