Functions/GenXdev.Webbrowser/Find-BrowserBookmarks.ps1
################################################################################ <# .SYNOPSIS Finds bookmarks from one or more web browsers. .DESCRIPTION Searches through bookmarks from Microsoft Edge, Google Chrome, or Mozilla Firefox and returns matches based on search queries. .PARAMETER Queries One or more search terms to find matching bookmarks. .PARAMETER Edge Search through Microsoft Edge bookmarks. .PARAMETER Chrome Search through Google Chrome bookmarks. .PARAMETER Firefox Search through Mozilla Firefox bookmarks. .PARAMETER Count Maximum number of results to return. Default is 99999999. .PARAMETER PassThru Returns bookmark objects instead of just URLs. .EXAMPLE Find-BrowserBookmarks -Query "github" -Edge -Chrome -Count 10 .EXAMPLE bookmarks github -e -ch -Count 10 #> function Find-BrowserBookmarks { [CmdletBinding(DefaultParameterSetName = 'Default')] [Alias("bookmarks")] param ( ######################################################################## [Alias("q", "Value", "Name", "Text", "Query")] [parameter( Mandatory = $false, Position = 0, ValueFromRemainingArguments = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, HelpMessage = "Search terms to find matching bookmarks" )] [string[]] $Queries, ######################################################################## [Alias("e")] [parameter( Mandatory = $false, HelpMessage = "Search through Microsoft Edge bookmarks" )] [switch] $Edge, ######################################################################## [Alias("ch")] [parameter( Mandatory = $false, HelpMessage = "Search through Google Chrome bookmarks" )] [switch] $Chrome, ######################################################################## [Alias("ff")] [parameter( Mandatory = $false, HelpMessage = "Search through Firefox bookmarks" )] [switch] $Firefox, ######################################################################## [parameter( Mandatory = $false, HelpMessage = "Maximum number of results to return" )] [ValidateRange(1, [int]::MaxValue)] [int] $Count = 99999999, ######################################################################## [parameter( Mandatory = $false, HelpMessage = "Return bookmark objects instead of just URLs" )] [switch] $PassThru ######################################################################## ) begin { Write-Verbose "Initializing browser bookmark search" $bookmarksArguments = @{} } process { # build arguments for Get-BrowserBookmarks based on selected browsers if ($Chrome) { $bookmarksArguments["Chrome"] = $true } if ($Edge) { $bookmarksArguments["Edge"] = $true } if ($Firefox) { $bookmarksArguments["Firefox"] = $true } Write-Verbose "Retrieving bookmarks from selected browsers" $bookmarks = Get-BrowserBookmarks @bookmarksArguments # if no search queries provided, return all bookmarks up to Count if (($null -eq $Queries) -or ($Queries.Length -eq 0)) { Write-Verbose "No search queries specified, returning all bookmarks" $bookmarks | Select-Object -First $Count return } Write-Verbose "Searching bookmarks for matches to queries" $results = $Queries | ForEach-Object { $query = $PSItem $bookmarks | Where-Object { ($PSItem.Folder -like "*$query*") -or ` ($PSItem.Name -Like "*$query*") -or ` ($PSItem.URL -Like "*$query*") } } | Select-Object -First $Count if ($PassThru) { Write-Verbose "Returning full bookmark objects" $results } else { Write-Verbose "Returning bookmark URLs only" $results | ForEach-Object URL } } end { } } ################################################################################ |