#PSTip Working with a Uniform Resource Identifier (URI) in PowerShell

Note: This tip requires PowerShell 2.0 or above.

PowerShell offers a powerful method of working with URIs by leveraging the System.Uri .NET class which offers many properties and methods that provide a way to easily manipulate and compare URIs. This class can be utilized by using the [System.Uri] notation in PowerShell. You can get the full list of properties and methods by using the following command:

PS> [System.Uri]'https://powershellmagazine.com' | Get-Member

An interesting feature is the ability to get the relative path of a URI. It can be done by using the MakeRelativeUri method:

PS> $BingQuery=[System.Uri]'http://www.bing.com/search?q=powershell+magazine&go=&qs=n&form=QBLH&filt=all&pq=powershell+magazine&sc=1-18&sp=-1&sk='
PS> $BingUri=[System.Uri]'http://www.bing.com'
PS> $BingUri.MakeRelativeUri($BingQuery.AbsoluteUri).OriginalString


Another interesting property is the DNSSafeHost. It contains the DNS hostname which can be used to check connectivity as is shown in the next example:

PS> Test-Connection $BingQuery.DnsSafeHost

The GetLeftPart() method can be used to only select a portion of a URI. This method takes the [System.UriPartial] enum as its argument. There are four enumeration names available, which can be displayed by executing the following line of code:

PS> [Enum]::GetNames([System.UriPartial])

When using Authority as a partial URI only the protocol and the DNS name portion of the URI will be shown:

PS> $Partial = [System.UriPartial]'Authority'
PS> $BingQuery.GetLeftPart($Partial)
Share on:
comments powered by Disqus