Public/Get-PopularAppsByCategory.ps1
|
function Get-PopularAppsByCategory { <# .SYNOPSIS Returns a list of popular applications organized by category. .DESCRIPTION This function provides curated lists of popular applications commonly deployed in enterprise environments, organized by category. Each app includes the WinGet package ID and a display name suitable for Intune deployment. .PARAMETER Category The category of applications to return. Valid categories include: - Browsers: Web browsers (Chrome, Firefox, Edge, Brave, etc.) - Productivity: Office productivity tools (Office, Adobe Reader, Notepad++, etc.) - Communication: Chat and collaboration tools (Teams, Zoom, Slack, Discord, etc.) - Development: Developer tools (VS Code, Git, Python, Node.js, etc.) - Media: Media players and editors (VLC, Spotify, Audacity, etc.) - Utilities: System utilities (7-Zip, WinRAR, Everything, TreeSize, etc.) - Security: Security and VPN tools (BitDefender, NordVPN, KeePass, etc.) - Graphics: Graphics and design tools (GIMP, Inkscape, Paint.NET, etc.) - Remote: Remote access tools (TeamViewer, AnyDesk, Chrome Remote Desktop, etc.) - All: Returns all categories .PARAMETER ReturnAsObject If specified, returns objects with AppId and AppName properties instead of a hashtable. .EXAMPLE Get-PopularAppsByCategory -Category Browsers Returns a hashtable of popular web browsers with their WinGet IDs and display names. .EXAMPLE Get-PopularAppsByCategory -Category Development -ReturnAsObject Returns an array of objects containing popular development tools. .EXAMPLE Get-PopularAppsByCategory -Category All Returns all popular apps across all categories. .EXAMPLE $devApps = Get-PopularAppsByCategory -Category Productivity -ReturnAsObject Invoke-WingetIntunePublisher -appid $devApps.AppId Deploy all development tools to Intune with a single authentication session. #> [CmdletBinding()] param( [Parameter(Mandatory = $true)] [ValidateSet( 'Browsers', 'Productivity', 'Communication', 'Development', 'Media', 'Utilities', 'Security', 'Graphics', 'Remote', 'All' )] [string]$Category, [Parameter(Mandatory = $false)] [switch]$ReturnAsObject ) # Define popular apps by category $popularApps = @{ Browsers = @{ 'Google.Chrome' = 'Google Chrome' 'Mozilla.Firefox' = 'Mozilla Firefox' 'Microsoft.Edge' = 'Microsoft Edge' 'Opera.Opera' = 'Opera' 'Vivaldi.Vivaldi' = 'Vivaldi' 'LibreWolf.LibreWolf' = 'LibreWolf' } Productivity = @{ 'Adobe.Acrobat.Reader.64-bit' = 'Adobe Acrobat Reader' 'Notepad++.Notepad++' = 'Notepad++' 'Microsoft.Office' = 'Microsoft Office' 'TheDocumentFoundation.LibreOffice' = 'LibreOffice' 'Notion.Notion' = 'Notion' 'Obsidian.Obsidian' = 'Obsidian' 'Microsoft.PowerToys' = 'PowerToys' 'Foxit.FoxitReader' = 'Foxit Reader' 'SumatraPDF.SumatraPDF' = 'Sumatra PDF' 'Evernote.Evernote' = 'Evernote' } Communication = @{ 'Microsoft.Teams' = 'Microsoft Teams' 'Zoom.Zoom' = 'Zoom' 'SlackTechnologies.Slack' = 'Slack' 'Discord.Discord' = 'Discord' 'Cisco.CiscoWebexMeetings' = 'Cisco Webex' 'RingCentral.RingCentral' = 'RingCentral' 'Telegram.TelegramDesktop' = 'Telegram Desktop' } Development = @{ 'Microsoft.VisualStudioCode' = 'Visual Studio Code' 'Git.Git' = 'Git' 'GitHub.GitHubDesktop' = 'GitHub Desktop' 'Python.Python.3.12' = 'Python 3.12' 'OpenJS.NodeJS' = 'Node.js' 'Microsoft.VisualStudio.2022.Community' = 'Visual Studio 2022 Community' 'JetBrains.IntelliJIDEA.Community' = 'IntelliJ IDEA Community' 'Docker.DockerDesktop' = 'Docker Desktop' 'Postman.Postman' = 'Postman' 'Microsoft.WindowsTerminal' = 'Windows Terminal' 'WinSCP.WinSCP' = 'WinSCP' 'PuTTY.PuTTY' = 'PuTTY' 'CoreyButler.NVMforWindows' = 'NVM for Windows' 'Microsoft.PowerShell' = 'PowerShell' } Media = @{ 'VideoLAN.VLC' = 'VLC Media Player' 'Spotify.Spotify' = 'Spotify' 'Audacity.Audacity' = 'Audacity' 'HandBrake.HandBrake' = 'HandBrake' 'OBSProject.OBSStudio' = 'OBS Studio' 'Apple.iTunes' = 'iTunes' 'AIMP.AIMP' = 'AIMP' 'clsid2.mpc-hc' = 'MPC-HC' } Utilities = @{ '7zip.7zip' = '7-Zip' 'RARLab.WinRAR' = 'WinRAR' 'voidtools.Everything' = 'Everything Search' 'JAMSoftware.TreeSize.Free' = 'TreeSize Free' 'Greenshot.Greenshot' = 'Greenshot' 'ShareX.ShareX' = 'ShareX' 'Piriform.CCleaner' = 'CCleaner' 'Microsoft.Sysinternals.PsTools' = 'Sysinternals PsTools' 'Microsoft.Sysinternals.ProcessExplorer' = 'Process Explorer' 'Microsoft.Sysinternals.Autoruns' = 'Autoruns' 'WinDirStat.WinDirStat' = 'WinDirStat' 'Rufus.Rufus' = 'Rufus' 'Balena.Etcher' = 'Balena Etcher' } Security = @{ 'KeePassXCTeam.KeePassXC' = 'KeePassXC' 'Bitwarden.Bitwarden' = 'Bitwarden' 'Malwarebytes.Malwarebytes' = 'Malwarebytes' 'GnuPG.Gpg4win' = 'Gpg4win' } Graphics = @{ 'GIMP.GIMP.2' = 'GIMP' 'Inkscape.Inkscape' = 'Inkscape' 'dotPDN.PaintDotNet' = 'Paint.NET' 'IrfanSkiljan.IrfanView' = 'IrfanView' 'XnSoft.XnViewMP' = 'XnView MP' 'Figma.Figma' = 'Figma' 'Canva.Canva' = 'Canva' } Remote = @{ 'TeamViewer.TeamViewer' = 'TeamViewer' 'Google.ChromeRemoteDesktopHost' = 'Chrome Remote Desktop' 'RealVNC.VNCViewer' = 'VNC Viewer' 'Microsoft.RemoteDesktopClient' = 'Microsoft Remote Desktop' 'Parsec.Parsec' = 'Parsec' } } # Return the requested category if ($Category -eq 'All') { $result = @{} foreach ($cat in $popularApps.Keys) { foreach ($app in $popularApps[$cat].GetEnumerator()) { if (-not $result.ContainsKey($app.Key)) { $result[$app.Key] = $app.Value } } } } else { $result = $popularApps[$Category] } if ($ReturnAsObject) { $objectList = [System.Collections.Generic.List[object]]::new() foreach ($app in $result.GetEnumerator()) { $objectList.Add([PSCustomObject]@{ AppId = $app.Key AppName = $app.Value }) } return $objectList.ToArray() } return $result } |