Enterprise-HorizonToolkit.psm1

<#
===============================================================================
 
Enterprise-HorizonToolkit.psm1
 
Author : Malik Oseni
Project : Enterprise-HorizonToolkit
Version : 1.0.0
 
Description
-----------
Root module loader for the Enterprise Horizon Toolkit.
 
Responsibilities
----------------
- Import configuration
- Load private functions
- Load public functions
- Initialise module state
- Export public cmdlets
 
===============================================================================
#>


#Requires -Version 5.1

Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'

try {

    ###########################################################################
    # Module Root
    ###########################################################################

    $script:ModuleRoot = Split-Path -Parent $PSCommandPath

    ###########################################################################
    # Module State
    ###########################################################################

    $script:Toolkit = [PSCustomObject]@{

        Version         = '1.2.0'

        ModuleRoot      = $script:ModuleRoot

        Configuration   = $null

        Connection      = $null

        Services        = $null

        ConnectedServer = $null

        ConnectedAt     = $null

        Loaded          = $false

    }

    ###########################################################################
    # Load Private Functions
    ###########################################################################

    Get-ChildItem `
        -Path (Join-Path $script:ModuleRoot 'Private') `
        -Filter '*.ps1' `
        -File |
    Sort-Object Name |
    ForEach-Object {

        Write-Verbose "Loading private function [$($_.BaseName)]"

        . $_.FullName

    }

    ###########################################################################
    # Load Public Functions
    ###########################################################################

    Get-ChildItem `
        -Path (Join-Path $script:ModuleRoot 'Public') `
        -Filter '*.ps1' `
        -File |
    Sort-Object Name |
    ForEach-Object {

        Write-Verbose "Loading public function [$($_.BaseName)]"

        . $_.FullName

    }

    ###########################################################################
    # Load Configuration
    ###########################################################################

    $script:Toolkit.Configuration = Import-HorizonConfiguration

    ###########################################################################
    # Module Ready
    ###########################################################################

    $script:Toolkit.Loaded = $true

    Write-Verbose "Enterprise-HorizonToolkit initialised successfully."

    ###########################################################################
    # Export Public Cmdlets
    ###########################################################################

    $PublicFunctions = Get-ChildItem `
        -Path (Join-Path $script:ModuleRoot 'Public') `
        -Filter '*.ps1' `
        -File |
    Select-Object -ExpandProperty BaseName

    Export-ModuleMember -Function ($PublicFunctions + 'Invoke-HorizonQuery')

}
catch {

    throw

}