function Open-UrlInDefaultBrowser { <# .SYNOPSIS Opens the Given URL in the User's Default Browser #> [CmdletBinding()] Param( [Parameter(Mandatory = $true)] [string]$url ) $logLead = (Get-LogLeadName); $edgeBrowserIdHash = "AppXq0fevzme2pys62n3e0fbqa7peapykr8v" [System.Uri]$uri = $null if (!([System.URI]::TryCreate($url, [System.UriKind]::Absolute, [ref]$uri) -and ($uri.Scheme -eq [System.Uri]::UriSchemeHttp -or $uri.Scheme -eq [System.Uri]::UriSchemeHttps))) { Write-Warning ("$logLead : The provided URL -- {0} -- could not be parsed as an absolute URI. Be sure to pass in the URL prefix and a full URL" -f $url) return } #Gets default browser from regedit; if there is none, sets to IE.HTTP; Chrome is ChromeHTML #TODO set this up for https as well $HKCUPath = "HKCU:\SOFTWARE\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice" $browserIdRaw = Get-ItemPropertyValue -Name ProgId -Path $HKCUPath -ErrorAction SilentlyContinue if(!$browserIdRaw -or $browserIdRaw -eq $edgeBrowserIdHash) { $browserId = "IE.HTTP" } else { $browserId = Get-ItemPropertyValue -Name ProgId -Path $HKCUPath -ErrorAction SilentlyContinue } try { Write-Verbose ("$logLead : Browser ID read as {0}" -f $browserId) New-PSDrive -PSProvider registry -Root 'HKEY_CLASSES_ROOT' -Name 'HKCR' | Out-Null $browserCmd = (Get-Item "HKCR:\$browserId\shell\open\command" | Get-ItemProperty | Select-Object -ExpandProperty "(default)") Write-Verbose ("$logLead : Raw browser command path read as {0}" -f $browserCmd) if ($browserCmd -match '\".+?\"') { return (Start-Process -FilePath $matches[0] -ArgumentList $url -PassThru).Id } else { Write-Warning ("$logLead : Could not read the browser command path from the registry") } } catch { Write-Warning ("$logLead : An unexpected exception occurred while opening the URL: {0}" -f $_.Exception.Message) } finally { Remove-PSDrive -Name "HKCR" } }