PublicIP.psm1

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

#region - Data import
Write-Verbose "[$scriptName] - [data] - Processing folder"
$dataFolder = (Join-Path $PSScriptRoot 'data')
Write-Verbose "[$scriptName] - [data] - [$dataFolder]"
Get-ChildItem -Path "$dataFolder" -Recurse -Force -Include '*.psd1' -ErrorAction SilentlyContinue | ForEach-Object {
    Write-Verbose "[$scriptName] - [data] - [$($_.Name)] - Importing"
    New-Variable -Name $_.BaseName -Value (Import-PowerShellDataFile -Path $_.FullName) -Force
    Write-Verbose "[$scriptName] - [data] - [$($_.Name)] - Done"
}

Write-Verbose "[$scriptName] - [data] - Done"
#endregion - Data import

#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    = '*'
    Function = 'Get-PublicIP'
    Variable = ''
    Cmdlet   = ''
}
Export-ModuleMember @exports