#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]'' | 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)

About the author: Jaap Brasser

Jaap is a Senior System Engineer in the Financial Services industry. He focuses on Microsoft and related technologies and has a passion for PowerShell. In his spare time he maintains his Blog, Twitter feed, @Jaap_Brasser, and contributes on the Official Scripting Guys Forum and Windows PowerShell TechNet forums

Related Posts