{"id":27629292,"url":"https://github.com/jdhitsolutions/pspodcast","last_synced_at":"2025-04-23T15:16:03.893Z","repository":{"id":287641508,"uuid":"964782788","full_name":"jdhitsolutions/PSPodcast","owner":"jdhitsolutions","description":"A few commands to get and display information of episodes of The PowerShell Podcast. This module is not officially affiliated with the podcast or PDQ.com. The module requires PowerShell 7.","archived":false,"fork":false,"pushed_at":"2025-04-14T14:43:20.000Z","size":586,"stargazers_count":5,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-23T15:15:56.384Z","etag":null,"topics":["powershell","powershell-module"],"latest_commit_sha":null,"homepage":"","language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jdhitsolutions.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":"https://paypal.me/jdhitsolutions?locale.x=en_US"}},"created_at":"2025-04-11T19:23:49.000Z","updated_at":"2025-04-23T14:29:50.000Z","dependencies_parsed_at":"2025-04-13T02:37:17.828Z","dependency_job_id":null,"html_url":"https://github.com/jdhitsolutions/PSPodcast","commit_stats":null,"previous_names":["jdhitsolutions/pspodcast"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdhitsolutions%2FPSPodcast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdhitsolutions%2FPSPodcast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdhitsolutions%2FPSPodcast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdhitsolutions%2FPSPodcast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jdhitsolutions","download_url":"https://codeload.github.com/jdhitsolutions/PSPodcast/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250457791,"owners_count":21433734,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["powershell","powershell-module"],"created_at":"2025-04-23T15:16:03.225Z","updated_at":"2025-04-23T15:16:03.885Z","avatar_url":"https://github.com/jdhitsolutions.png","language":"PowerShell","funding_links":["https://paypal.me/jdhitsolutions?locale.x=en_US"],"categories":[],"sub_categories":[],"readme":"# PSPodcast\n\n[![PSGallery Version](https://img.shields.io/powershellgallery/v/PSPodcast.png?style=for-the-badge\u0026label=PowerShell%20Gallery)](https://www.powershellgallery.com/packages/PSPodcast/) [![PSGallery Downloads](https://img.shields.io/powershellgallery/dt/PSPodcast.png?style=for-the-badge\u0026label=Downloads)](https://www.powershellgallery.com/packages/PSPodcast/)\n\nThis module requires PowerShell 7 and has a dependency on the [pwshSpectreConsole](https://github.com/ShaunLawrie/PwshSpectreConsole) module. This requirement will be installed automatically if you don't have it already.\n\n```powershell\nInstall-PSResource PSPodcast\n```\n\nThis is a relatively simple module designed to get and display information about recent episodes of [The PowerShell Podcast](https://powershellpodcast.podbean.com/). The module commands are not written with automation or scaling in mind. They are designed for interactive use to display podcast information in a visually engaging way. For best results, run the commands in a terminal that supports ANSI colors and formatting, such as Windows Terminal.\n\nRun `Get-PSPodcastModule` to see the module commands and their descriptions. The output is an ANSI formatted table with clickable links to the project's GitHub repository and online help.\n\n![Get-PSPodcastModule](images/get-pspodcastmodule.png)\n\n\n\u003e *This module is not affiliated with The PowerShell Podcast or PDQ.com.*\n\n## Module Import\n\nIn order to improve performance of module commands, when the module is imported, the RSS feed XML file will be downloaded and saved to the TEMP folder. When you run `Get-PSPodcast`, the function will use this file instead of downloading the XML file again. However, if the file has not been found or is older than 24 hours, the XML file will be downloaded again.\n\n## [Get-PSPodcast](docs/Get-PSPodcast.md)\n\nThe `Get-PSPodcast` function will retrieve episode information from The PowerShell Podcast and display formatted results using `$PSStyle`. The command has an alias of `gpod`. By default the command will retrieve the 5 most recent episodes or you can specify a number of episodes.\n\n![Get-PSPodcast](images/Get-PSPodcast.png)\n\nThe default output is formatted as a table using `$PSStyle`. The show title should be a clickable link. Currently, there is no way to customize the formatting. However, you can use `Format-List` to see all properties unformatted.\n\n```cmd\nPS C:\\\u003e Get-PSPodcast | Format-List\n\nTitle       : PowerShell Summit Bar Sessions 2025 - David R\nDate        : 4/10/2025 5:00:00 PM\nDescription : In this casual bar-session chat recorded at the PowerShell +\n              DevOps Global Summit 2025, host Andrew Pla sits down with David\n              R, a first-time attendee with a passion for learning PowerShell.\n              David shares how the PowerShell Podcast itself inspired him to\n              attend and helped shape his scripting journey. What began as a\n              work assignment turned into a powerful learning path, community\n              connection, and a personal transformation.\nEpisode     : 169\nLength      : 00:13:26\nOnline      : https://powershellpodcast.podbean.com/e/powershell-summit-bar-sess\n              ions-2025-david-r/\nShowLinks   : {}\nYouTube     :\n\nTitle       : PowerShell Summit Bar Sessions 2025 - Frank Lesniak\nDate        : 4/9/2025 5:13:01 PM\nDescription : In this episode of the PowerShell Summit 2025 Bar Sessions, Frank\n              Lesniak makes a triumphant return to the podcast. Frank has taken\n              the reigns In this two-sided interview, Frank flips the script\n              and interviews Andrew, but only after we talk about how his week\n              is going, fine dining, how to grow in your career and capitalize\n              on opportunity, the value of empowering others, and more!\nEpisode     : 168\nLength      : 00:24:06\nOnline      : https://powershellpodcast.podbean.com/e/the-powershell-summit-bar-\n              sessions-frank-lesniak/\nShowLinks   : {https://pdq.com/the-powershell-podcast,\n              https://youtu.be/HoYKzgiJxkk}\nYouTube     : https://youtu.be/HoYKzgiJxkk\n...\n```\n\n### All\n\nIf you want to get all published episodes, use the `-All` parameter. You might want to do this if you want to perform custom filtering.\n\n```powershell\nPS C:\\\u003e Get-PSPodcast -All | Group -Property {$_.date.year} -NoElement\n\nCount Name\n----- ----\n   44 2022\n   53 2023\n   54 2024\n   17 2025\n```\n\n```powershell\n$all = Get-PSPodcast -all\n$y = $all | group { $_.date.year }\nForeach ($item in $y) {\n    $totalMin = ($item.Group).Length.TotalMinutes | measure -Sum\n    [PSCustomObject]@{\n        Year      = $item.Name\n        Shows     = $item.Count\n        TotalTime = New-TimeSpan -Minutes $totalMin.Sum\n    }\n}\n\nYear Shows TotalTime\n---- ----- ---------\n2022    44 2.04:27:00\n2023    53 2.10:35:00\n2024    54 2.03:42:00\n2025    17 11:44:00\n```\n\n### Episode\n\nIf you know the episode number, you can use the `-Episode` parameter to get a specific episode.\n\n```cmd\nPS C:\\\u003e Get-PSPodcast -Episode 160\n\n   Show: MS Graph and Stepping into Public Speaking with Morten Kristensen\n[Episode #160]\n\nDate      Length   Description\n----      ------   -----------\n2/24/2025 00:33:49 In this episode of the PowerShell Podcast,we sit down with\n                   Morten Kristensen, an automation specialist and PowerShell\n                   enthusiast, to discuss his journey with PowerShell, his\n                   experience working with the Microsoft Graph API, and his\n                   recent leap into public speaking. Morten shares insights\n                   from his first-ever technical talk, the challenges of\n                   working with Graph API, and how he's navigating his\n                   professional growth.\n```\n\n### Query\n\nFinally, you can find podcast episodes with a given keyword or phrase using the `-Query` parameter. This will search the title and description of each episode. The podcast XML feed does not have a specific entry for the guest, so this is the best way to find episodes with a specific guest.\n\n```cmd\nPS C:\\\u003e Get-PSPodcast -query \"frank lesniak\"\n\n   Show: PowerShell Summit Bar Sessions 2025 - Frank Lesniak [Episode #168]\n\nDate     Length   Description\n----     ------   -----------\n4/9/2025 00:24:06 In this episode of the PowerShell Summit 2025 Bar Sessions,\n                  Frank Lesniak makes a triumphant return to the podcast. Frank\n                  has taken the reigns In this two-sided interview, Frank flips\n                  the script and interviews Andrew, but only after we talk\n                  about how his week is going, fine dining, how to grow in your\n                  career and capitalize on opportunity, the value of empowering\n                  others, and more!\n\n   Show: Cross-Platform PowerShell and Sending Emails with Frank Lesniak \u0026 Neha\nPatil [Episode #142]\n\nDate       Length   Description\n----       ------   -----------\n10/21/2024 00:50:32 In this episode of the PowerShell Podcast, we dive into the\n                    world of cross-platform PowerShell with Frank Lesniak, who\n                    shares insights from his recent talk at PowerShell Saturday\n                    NC. Frank explores some unique use cases for PowerShell\n                    across different platforms and opens up about his interests\n                    beyond the scripting language.\n\n   Show: For the love of PowerShell and Curling with Frank Lesniak [Episode\n#119]\n\nDate      Length   Description\n----      ------   -----------\n5/13/2024 00:33:54 In this special MMSMOA episode of the PowerShell Podcast,\n                   Andrew is joined by Frank Lesniak. We touch base after\n                   PowerShell Summit, hear about tracking airplanes with ADS-B\n                   and raspberry pi's. Frank talks about classes and how they\n                   almost caused him to fall out of love with PowerShell. We\n                   also recount what most be the most brutal display of\n                   athleticism, curling.\n```\n\n### Format and Type Extensions\n\nThe `PSPodcastInfo` object has a number of type extensions you might find helpful.\n\n```powershell\nPS C:\\\u003e Get-PSPodcast | Get-Member\n\n   TypeName: PSPodcastInfo\n\nName         MemberType    Definition\n----         ----------    ----------\nOnline       AliasProperty Online = Link\nEquals       Method        bool Equals(System.Object obj)\nGetHashCode  Method        int GetHashCode()\nGetType      Method        type GetType()\nToString     Method        string ToString()\nDate         NoteProperty  datetime Date=4/10/2025 5:00:00 PM\nDescription  NoteProperty  string Description=In this casual bar-session chat r…\nDownloadLink NoteProperty  string DownloadLink=https://mcdn.podbean.com/mf/web/…\nEpisode      NoteProperty  string Episode=169\nLength       NoteProperty  System.TimeSpan Length=00:13:26\nLink         NoteProperty  string Link=https://powershellpodcast.podbean.com/e/…\nShowLinks    NoteProperty  string[] ShowLinks=System.String[]\nTitle        NoteProperty  string Title=PowerShell Summit Bar Sessions 2025 - D…\nYouTube      NoteProperty  object YouTube=null\nLinks        PropertySet   Links {Title, Date, Online, YouTube, ShowLinks}\nlist         PropertySet   list {Episode, Date, Title}\nDownloadShow ScriptMethod  System.Object DownloadShow();\n```\n\nThe property sets are designed to quickly display relevant information.\n\n```cmd\nPS C:\\\u003e Get-PSPodcast -Episode 96 | Select-Object links\n\nTitle     : Code in Action: Embracing Hands-On Learning with Jeff Hicks\nDate      : 12/11/2023 10:00:00 AM\nOnline    : https://powershellpodcast.podbean.com/e/code-in-action-embracing-han\n            ds-on-learning-with-jeff-hicks/\nYouTube   : https://www.youtube.com/watch?v=lV5RXZPiM_0\nShowLinks : {https://www.youtube.com/watch?v=lV5RXZPiM_0,\n            https://powershell.org/2023/11/earlybirdnowopen/,\n            https://jeffhicks.substack.com/p/ask-jeff-ab8, https://devdojo.com/h\n            critter/powershell-perfomance-test-get-the-maximum…}\n\nPS C:\\\u003e Get-PSPodcast -Last 5 | Select-Object list\n\nEpisode Date                  Title\n------- ----                  -----\n169     4/10/2025 5:00:00 PM  PowerShell Summit Bar Sessions 2025 - David R\n168     4/9/2025 5:13:01 PM   PowerShell Summit Bar Sessions 2025 - Frank Lesni…\n167     4/8/2025 5:30:00 PM   PowerShell Summit Bar Sessions 2025 - Steven Judd\n166     4/7/2025 10:00:00 AM  Discovering the Deeper Layers of PowerShell with …\n165     3/31/2025 10:00:00 AM From Proper Football to Databases with Jess Pomfr…\n```\n\nThe module has default list and table formatted views. In addition, you can use the `list` custom table view.\n\n![List view](images/format-table-list.png)\n\nThe show title is clickable link.\n\n#### Use Spectre Formatting\n\nFinally, because this module has the `pwshSpectreConsole` module as a dependency, you can use the `Format-SpectrePanel` or `Format-SpectreTable commands to display podcast episode information.\n\n```powershell\n$show = Get-PSPodcast -episode 166\n$header = \"Episode #{0} - {1}\" -f $show.Episode,$show.date.ToShortDateString()\n$data = @\"\n\n[italic LightCoral]$($show.title)[/]\n\n$($show.description)\n\n[bold Yellow]NOTES:[/]\n$($show.ShowLinks.foreach({\"`n :right_arrow:  $($_.Trim())\"}))\n\n[DarkTurquoise]$($show.online)[/]\n\"@\n\nFormat-SpectrePanel -Header $header -Data $data -Color CornflowerBlue\n```\n\n![Format-SpectrePanel](images/custom-panel.png)\n\n```powershell\nFormat-SpectreTable -Title $show.Title -Data @($show.description,\"`n\",$show.online) -AllowMarkup -Color LightCoral -TextColor Khaki1\n```\n\n![Format-SpectreTable](images/custom-table.png)\n\n## [Save-PSPodcast](docs/Save-PSPodcast.md)\n\nOnce you have an episode object from `Get-PSPodcast`, you can use the `Save-PSPodcast` function to download the MP3 file. The default location is `$HOME`. You can specify a different path using the `-Path` parameter.\n\n```cmd\nPS C:\\\u003e $r = Get-PSPodcast -last 5\nPS C:\\\u003e $r[0] | Save-PSPodcast -Path d:\\ -Passthru\n\n    Directory: D:\\\n\nMode                 LastWriteTime         Length Name\n----                 -------------         ------ ----\n-a---           4/12/2025 12:41 PM       32255999 PowerShellPodcast-169.mp3\n```\n\nThe file name uses the format `PowerShellPodcast-\u003cepisode number\u003e.mp3`.\n\n## [Get-PSPodcastShowNotes](docs/Get-PSPodcastShowNotes.md)\n\nThe `PSPodcastInfo` object includes a number of properties that point to online links. The object has a property set called `Links` which makes it easy to see all of them at once.\n\n```cmd\nPS C:\\\u003e $r[5] | Select Links\n\nTitle     : How to Build an IT Career from the Ground Up with Kevin Apolinario\n            (KevTech)\nDate      : 3/24/2025 10:00:00 AM\nOnline    : https://powershellpodcast.podbean.com/e/how-to-build-an-it-career-fr\n            om-the-ground-up-with-kevin-apolinario-kevtech/\nYouTube   : https://youtu.be/RrNyh6EuD_Q\nShowLinks : {https://kevtechitsupport.com, http://discord.gg/pdq,\n            https://pdq.com/the-powershell-podcast,\n            https://youtu.be/RrNyh6EuD_Q}\n```\n\nYou can also use the `Get-PSPodcastShowNotes` function, which has an alias of `shownotes`. Pipe a previously retrieved `PSPodcastInfo` object to the command.\n\n![Get-PSPodcastShowNotes](images/shownotes.png)\n\nThe output is displayed with a formatted Spectre Console panel. The title should be a clickable link to the show online. The links should also be clickable in Windows Terminal.\n\nYou can adjust the border and title colors. The parameters have tab completion for the color values. See the next section.\n\n## [Show-LatestPSPodcast](docs/Show-LatestPSPodcast.md)\n\nThe `Show-LatestPSPodcast` function is a wrapper around `Get-PSPodcast`. It is designed to get the most recent episode. The command has an alias of `pspod`. The information is formatted using `Format-SpectrePanel` from the `pwshSpectreConsole` module.\n\n![Show-LatestPSPodcast](images/pspod.png)\n\nYou can customize the border, title, and link colors using any valid `Spectre.Console.Color` value. The function as an argument completer for the colo parameters. This will give you tab completion. And if you press`Ctrl+Space`, the PSReadLine module will display options formatted in the selected color.\n\n![color completer](images/tab-complete-color.png)\n\nIf you press `Ctrl+Space` before specifying a color, you will be prompted and can see all available colors.\n\n![all color completer](images/tab-complete-all-colors.png)\n\nYou can use any color combination to customize the display.\n\n![customized latest podcast](images/pspod-customized.png)\n\nIf you prefer a different color scheme, use `$PSDefaultParameterValues` to set them.\n\n```powershell\n$PSDefaultParameterValues['Show-LatestPSPodcast:BorderColor'] = \"hotpink\"\n```\n\n### Profile Integration\n\nThe `Show-LatestPSPodcast` function was created with profile integration in mind. The idea is that you can insert the command or `pspod` alias into your PowerShell profile script. Then, every time you start a new PowerShell session, the latest episode will be displayed. However, if you open new PowerShell sessions often, this might get tedious.\n\nIf you want to include the command in your profile, it is recommended you include the `-Profile` parameter.\n\n```powershell\npspod -profile\n```\n\nThis parameter will check for the existence of a flag file stored in `$HOME`.\n\n```powershell\nPS C:\\\u003e Get-Item $HOME\\pspod.flag\n\n    Directory: C:\\Users\\Jeff\n\nMode                 LastWriteTime         Length Name\n----                 -------------         ------ ----\n-a---           4/11/2025  8:37 AM           1124 pspod.flag\n```\n\nIf the flag file exists, __and__ you use the `-Profile` parameter, the command will test the `LastWriteTime` property. If it is greater than 24 hours, the command will display the latest episode and update the flag file. If the file is less than 24 hours, the command will not display anything. This should make it possible to have the command in your profile without it displaying every time you start a new session.\n\nOf course, you can force display by omitting the `-Profile` parameter.\n\nIf you uninstall the module you will need to manually delete the flag file.\n\n## Road Map\n\nI have a few more ideas in mind and there will be a few more updates in the next few weeks. If you have an enhancement suggestion or question, please use the project's [Discussion](https://github.com/jdhitsolutions/PSPodcast/discussions) board.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdhitsolutions%2Fpspodcast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjdhitsolutions%2Fpspodcast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdhitsolutions%2Fpspodcast/lists"}