Invoke-MrRssFeedMenu.ps1
#Requires -Version 3.0 function Invoke-MrRssFeedMenu { <# .SYNOPSIS Retrieves information from the specified RSS feed and displays it in a selectable menu. .DESCRIPTION Invoke-MrRssFeedMenu is an advanced function that retrieves information from the specified RSS feed, displays it in a selectable menu and then prompts the user to return the information about the selected item in a browser or as text. .PARAMETER Uri Specifies the Uniform Resource Identifier (URI) of the RSS feed to which the web request is sent. This parameter supports HTTP, HTTPS, FTP, and FILE values. The default is the PowerShell.org RSS feed. .EXAMPLE Invoke-MrRssFeedMenu .EXAMPLE Invoke-MrRssFeedMenu -Uri http://mikefrobbins.com/feed/ .INPUTS None .NOTES Author: Mike F Robbins Website: http://mikefrobbins.com Twitter: @mikefrobbins #> [CmdletBinding()] param ( [ValidateNotNullOrEmpty()] [string]$Uri = 'https://powershell.org/feed/' ) $Results = Invoke-RestMethod -Uri $Uri $MenuItems = for ($i = 1; $i -le $Results.Count; $i++) { [pscustomobject]@{ Number = $i Title = $Results[$i-1].title PublicationDate = ([datetime]$Results[$i-1].pubDate).ToShortDateString() Author = $Results[$i-1].creator.InnerText } } $PostMenu = @" $($MenuItems | Out-String) Enter the number of the article to view "@ do { Clear-Host [int]$Post = Read-Host -Prompt $PostMenu } while ( $Post -notin 1..$Results.Count ) Clear-Host $OutputMenu = @" Number DisplayOption ------ ---------------- 1 Default Browser 2 Text 3 Quit Enter the number to display the article in the desired option "@ Clear-Host do { [int]$OutputType = Read-Host -Prompt $OutputMenu } while ( $OutputType -notin 1..3 ) switch ($OutputType) { 1 { Start-Process ($Results[$Post-1]).link Clear-Host break } 2 { if ($PSVersionTable.PSEdition -eq 'Core') { Clear-Host ($Results[$Post-1]).InnerText.ToString() -replace "\t.*|`n|<[^>]*>|/\s\s+/g|^\s+|\s+$" } else { Clear-Host (Invoke-WebRequest -Uri $Results[$Post-1].link).ParsedHtml.body.getElementsByClassName('entry-content')[0].InnerText.Trim() -replace 'Views.*' } break } 3 { break } } } |