WhatsMyIP.ps1


<#PSScriptInfo
 
.VERSION 0.1
 
.GUID 7e1cc5c5-e76e-4a61-906a-53679cc7c183
 
.AUTHOR Rowel Balot
 
.COMPANYNAME
 
.COPYRIGHT The IT Blogs
 
.TAGS IP, My IP, Public IP, What's My IP
 
.LICENSEURI
 
.PROJECTURI https://www.theitblogs.com/
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
Using http://ipinfo.io free API with limit of 1,000 request per day and Dyn DNS as providers.
 
#>


<#
 
.DESCRIPTION
 Get Current Public IP Address
 
#>
 
Param(

    [Parameter(Mandatory=$false,Position=0)]
    [ValidateSet("IPINFO","DYNDNS")]
    [string]$Provider="IPINFO",
    
    [Parameter(Mandatory=$false,Position=1)]
    [switch] $All,
    
    [Parameter(Mandatory=$false,Position=2)]
    [switch] $ToClipBoard
)

If ($Provider -eq "DYNDNS") {
    $ipinfo = ((Invoke-WebRequest -URI "http://checkip.dyndns.org" -TimeoutSec 5) | Select-String "(((\d){1,3}\.){3}(\d){1,3})").Matches.Value
    $ipinfo = New-Object PSObject -Property @{ IP = $ipinfo}
}
else {
    $ipinfo = Invoke-RestMethod http://ipinfo.io/json
}

if ($ToClipBoard) {
    $null = [Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    [Windows.Forms.Clipboard]::SetText($ipinfo.ip)
}


$IPInfoOut = New-Object -TypeName psobject
$IPInfoOut | Add-Member -NotePropertyName "IP" -NotePropertyValue $ipinfo.ip
if($All) {
    $IPInfoOut | Add-Member -NotePropertyName "Host Name" -NotePropertyValue $ipinfo.hostname
    $IPInfoOut | Add-Member -NotePropertyName "City" -NotePropertyValue $ipinfo.city
    $IPInfoOut | Add-Member -NotePropertyName "Region" -NotePropertyValue $ipinfo.region
    $IPInfoOut | Add-Member -NotePropertyName "Country" -NotePropertyValue $ipinfo.country
    $IPInfoOut | Add-Member -NotePropertyName "Geo Location" -NotePropertyValue $ipinfo.loc
    $IPInfoOut | Add-Member -NotePropertyName "Organization" -NotePropertyValue $ipinfo.org
    $IPInfoOut | Add-Member -NotePropertyName "Zip Code" -NotePropertyValue $ipinfo.postal
}
Write-Output $IPInfoOut