Functions/GenXdev.Queries/Open-AllPossibleQueries.ps1
################################################################################ <# .SYNOPSIS Opens all possible query types for given search terms or URLs. .DESCRIPTION Executes all cmdlets that handle webpage queries, processing both URLs and search terms. For URLs, it performs site-specific queries, and for search terms it executes general web queries. .PARAMETER Queries The search terms or URLs to query. .PARAMETER Monitor Monitor selection: 0=default, -1=discard, -2=secondary monitor. .EXAMPLE Open-AllPossibleQueries -Queries "powershell scripting" -Monitor 0 .EXAMPLE qq "https://github.com" -m -1 #> function Open-AllPossibleQueries { [CmdletBinding()] [Alias("qq")] param( ######################################################################## [parameter( Mandatory = $true, Position = 0, ValueFromRemainingArguments = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, HelpMessage = "The query to perform" )] [string[]] $Queries, ######################################################################## [parameter( Mandatory = $false, Position = 1, HelpMessage = "Monitor to use: 0=default, -1=discard, -2=secondary" )] [Alias("m", "mon")] [int] $Monitor = -1 ######################################################################## ) DynamicParam { Copy-CommandParameters ` -CommandName "Open-Webbrowser" ` -ParametersToSkip "Url", "Monitor" } begin { Write-Verbose "Starting Open-AllPossibleQueries with Monitor = $Monitor" } process { # remove queries from bound parameters as we process them separately $null = $PSBoundParameters.Remove("Queries") # ensure monitor parameter is set if (-not $PSBoundParameters.ContainsKey("Monitor")) { $null = $PSBoundParameters.Add("Monitor", $Monitor) } foreach ($query in $Queries) { try { # attempt to parse query as uri [Uri] $uri = $null $queryTrimmed = $query.Trim('"').Trim("'") # check if query is a valid uri $isUri = ( [Uri]::TryCreate($queryTrimmed, "absolute", [ref] $uri) -or ( $query.ToLowerInvariant().StartsWith("www.") -and [Uri]::TryCreate("http://$queryTrimmed", "absolute", [ref] $uri) ) ) -and $uri.IsWellFormedOriginalString() -and $uri.Scheme -like "http*" if ($isUri) { # process uri queries Get-Command -Module "*.Queries" -ErrorAction SilentlyContinue | ForEach-Object Name | ForEach-Object { if ($PSItem -like "Open-WebsiteAndPerformQuery") { return } if ($PSItem.EndsWith("SiteInfo") -and $PSItem.StartsWith("Open-")) { # execute host-based query $null = & $PSItem $uri.DnsSafeHost # process full url if not host-only query if (-not $PSItem.EndsWith("HostSiteInfo")) { $safeUrl = $query.Split("#")[0] if ($uri.Query.Length -gt 0) { $safeUrl = $safeUrl.Replace($uri.Query, "") } if (-not $PSBoundParameters.ContainsKey("Url")) { $null = $PSBoundParameters.Add("Url", $safeUrl) } try { & $PSItem @PSBoundParameters } catch { Write-Warning @" Error: $($PSItem.Exception) At: $($PSItem.InvocationInfo.PositionMessage) Line: $($PSItem.InvocationInfo.Line) "@ } $null = $PSBoundParameters.Remove("Url") } } } return } } catch { throw } if ($PSBoundParameters.ContainsKey("Url")) { $PSBoundParameters.Remove("Url") | Out-Null; } Get-Command -Module "*.Queries" -ErrorAction SilentlyContinue | ForEach-Object Name | ForEach-Object { if ($PSItem -like "Open-WebsiteAndPerformQuery") { return } if ($PSItem.EndsWith("Query") -and $PSItem.StartsWith("Open-")) { $Query = $Query.Replace("`"", "```""); try { if ($PSBoundParameters.ContainsKey("Queries")) { $PSBoundParameters.Remove("Queries") | Out-Null; } $PSBoundParameters.Add("Queries", @($Query)) | Out-Null; & $PSItem @PSBoundParameters $PSBoundParameters.Remove("Queries") | Out-Null; } Catch { Write-Warning @" Error: $($PSItem.Exception) At: $($PSItem.InvocationInfo.PositionMessage) Line: $($PSItem.InvocationInfo.Line) "@ } } } } } end { Write-Verbose "Completed processing all queries" } } |