Public/UriBuilder.ps1

Set-StrictMode -Version 2.0

function Get-Uri {
    [Alias('UriBuilder')]
    [CmdLetBinding()]
    param (
        [Parameter(ParameterSetName = "__schemeProtocol", Position = 0)]
        [ValidateSet("file", "ftp", "gopher", "http", "https", "mailto", "news")]
        [string]$scheme = "http",
        [Parameter(ParameterSetName = "__schemeUseSsl", Position = 0)]
        [bool]$useSsl = $false,
        [Parameter(Mandatory = $true, Position = 1)]
        [string]$hostName,
        [int]$port,
        [string]$path,
        [string]$query,
        [string]$fragment
    )

    [System.UriBuilder]$uriBuilder = New-Object -TypeName 'System.UriBuilder'

    switch ($PSCmdlet.ParameterSetName) {
        '__schemeProtocol' {
            $uriBuilder.Scheme = $scheme
        }
        '__schemeUseSsl' {
            $uriBuilder.Scheme = $(if ($useSsl) { 'https' } else { 'http' })
        }
    }

    $uriBuilder.Host = $hostName
    if ($port) {
        $uriBuilder.Port = $port
    }

    if ($path) {
        $uriBuilder.Path = $path
    }

    if ($query) {
        $uriBuilder.Query = $query
    }

    if ($fragment) {
        $uriBuilder.Fragment = $fragment
    }

    return [string]$($uriBuilder)
}

Set-Alias -Name UriBuilder -Value Get-Uri
Export-ModuleMember -Function Get-Uri -Alias UriBuilder