PublicIP.psm1

[CmdletBinding()]
param()
$scriptName = $MyInvocation.MyCommand.Name
Write-Verbose "[$scriptName] Importing module"

#region - From /private
Write-Verbose "[$scriptName] - [/private] - Processing folder"

#region - From /private/common.ps1
Write-Verbose "[$scriptName] - [/private/common.ps1] - Importing"

$script:providerMap = @{
    MyIP   = 'https://api.myip.com/'
    IPInfo = 'https://ipinfo.io/json'
}

Write-Verbose "[$scriptName] - [/private/common.ps1] - Done"
#endregion - From /private/common.ps1

Write-Verbose "[$scriptName] - [/private] - Done"
#endregion - From /private

#region - From /public
Write-Verbose "[$scriptName] - [/public] - Processing folder"

#region - From /public/Get-PublicIP.ps1
Write-Verbose "[$scriptName] - [/public/Get-PublicIP.ps1] - Importing"

function Get-PublicIP {
    <#
        .SYNOPSIS
        Gets your public IP address.

        .DESCRIPTION
        Gets your public IP address. You can specify a provider to use by using the Provider parameter.

        .EXAMPLE
        Get-PublicIP

        .EXAMPLE
        Get-PublicIP -Provider MyIP
    #>

    param(
        # The provider to use to get the public IP address.
        [Parameter()]
        [ValidateScript({ $providerMap.Keys })]
        $Provider = 'IPInfo'
    )

    Invoke-RestMethod -Uri $providerMap[$Provider]
}

Write-Verbose "[$scriptName] - [/public/Get-PublicIP.ps1] - Done"
#endregion - From /public/Get-PublicIP.ps1

Write-Verbose "[$scriptName] - [/public] - Done"
#endregion - From /public


$exports = @{
    Alias    = '*'
    Cmdlet   = ''
    Function = 'Get-PublicIP'
    Variable = ''
}
Export-ModuleMember @exports