Private/Provider/Invoke-ProviderSearch.ps1
|
function Invoke-ProviderSearch { param( [string]$Query, [int]$MaxResults = 50, [bool]$ExactSearch = $false, [string]$SortBy = 'Relevance', [string]$Repository = 'PSGallery', [bool]$AuthorSearch = $false ) $provider = Get-ModuleProvider try { Import-ActiveProvider -Provider $provider if ($AuthorSearch) { if ($provider -eq 'PSResourceGet') { # PSResourceGet has no author filter; use name wildcard as pre-filter then match author Write-Verbose "PSResourceGet: Author search for '$Query' (using server-side filter)..." try { $raw = Find-PSResource -Name "*${Query}*" -Repository $Repository -Type Module -ErrorAction Stop | Where-Object { $_.Author -like "*$Query*" } | Select-Object -First ($MaxResults * 2) } catch { $raw = @() } if ($raw.Count -eq 0) { Write-Warning "Author search with PSResourceGet is limited. Consider installing PowerShellGet for better author search support." } $results = $raw | ConvertTo-ModuleInfo -ProviderType 'PSResourceGet' } else { # PowerShellGet's -Filter searches all metadata including author $raw = Find-Module -Filter $Query -Repository $Repository -ErrorAction Stop | Where-Object { $_.Author -like "*$Query*" } | Select-Object -First $MaxResults $results = $raw | ConvertTo-ModuleInfo -ProviderType 'PowerShellGet' } } else { $resolvedQuery = if ($ExactSearch) { $Query } else { "*$Query*" } if ($provider -eq 'PSResourceGet') { $fetchCount = if ($SortBy -eq 'Downloads') { $MaxResults * 2 } else { $MaxResults } $raw = Find-PSResource -Name $resolvedQuery -Repository $Repository -Type Module -ErrorAction Stop | Select-Object -First $fetchCount $results = $raw | ConvertTo-ModuleInfo -ProviderType 'PSResourceGet' } else { $raw = Find-Module -Name $resolvedQuery -Repository $Repository -ErrorAction Stop | Select-Object -First $MaxResults $results = $raw | ConvertTo-ModuleInfo -ProviderType 'PowerShellGet' } } switch ($SortBy) { 'Downloads' { $results = $results | Sort-Object -Property DownloadCount -Descending } 'LastUpdated' { $results = $results | Sort-Object -Property PublishedDate -Descending } } return $results | Select-Object -First $MaxResults } catch { Write-Error "Search failed: $_" return @() } } |