# encoding: ascii
# api: powershell
# title: Get-ShortenedURL
# description: A function that returns the actual URL from a http redirect. Accepts pipeline input but does nothing useful with errors.
# version: 0.1
# type: function
# author: Chris Campbell
# license: CC0
# function: Get-ShortenedURL
# x-poshcode-id: 3865
# x-archived: 2013-01-10T19:08:14
# x-published: 2013-01-07T20:51:00
#
#
Function Get-ShortenedURL {
<#
.SYNOPSIS
Get-ShortenedURL
Author: Chris Campbell (@obscuresec)
License: BSD 3-Clause
.DESCRIPTION
A function that returns the actual URL from a http redirect.
.PARAMETER $ShortenedURL
Specifies the shortened URL.
.EXAMPLE
PS C:\> Get-ShortenedURL -ShortenedURL http://goo.gl/V4PKq
PS C:\> Get-ShortenedURL -ShortenedURL http://goo.gl/V4PKq,http://bit.ly/IeWSIZ
PS C:\> Get-Content C:\urls.txt | Get-ShortenedURL
PS C:\> Get-ShortenedURL -ShortenedURL (Get-Content C:\urls.txt)
.LINK
http://obscuresecurity.blogspot.com/2013/01/Get-ShortenedURL.html
https://github.com/obscuresec/random/blob/master/Get-ShortenedURL
#>
[CmdletBinding()] Param(
[Parameter(Mandatory=$True,ValueFromPipeline=$True)]
[string[]] $ShortenedURL
)
BEGIN {}
PROCESS {
Try {
#Loop through each URL in the array
Foreach ($URL in $ShortenedURL) {
#Create the WebClient Object and request
$WebClientObject = New-Object System.Net.WebClient
$WebRequest = [System.Net.WebRequest]::create($URL)
$WebResponse = $WebRequest.GetResponse()
#Parse out redirected URL
$ActualDownloadURL = $WebResponse.ResponseUri.AbsoluteUri
#Create custom object to store results
$ObjectProperties = @{ 'Shortened URL' = $URL;
'Actual URL' = $ActualDownloadURL}
$ResultsObject = New-Object -TypeName PSObject -Property $ObjectProperties
#Output the results
Write-Output $ResultsObject
#Close the webclient connection
$WebResponse.Close()
}
}
Catch {}
}
END {}
}