lib/Providers.ps1

Function Import-TMCProvider {
    param(
        [Parameter(Mandatory = $true, 
            ValueFromPipeline = $true, 
            Position = 0)]
            [String]$Provider,
        
        [Parameter(Mandatory = $false)]
        [Switch]$Force
    )
    
    ## Get the PS module Root folder
    $TMProviderModuleName = 'TMConsole.Provider.' + ($Provider -replace ' - ', '.' -replace ' ', '.')

    ## Get the list of installed provider modules
    if ($Force) {
        $InstalledProviderModules = @((Get-Module -Name 'TMConsole.Provider.*' -ListAvailable).Name)
    }
    else {
        $InstalledProviderModules = Get-TMConsoleSetting -Name 'InstalledProviderModules'
    }

    ## If the Module is not installed
    if ($TMProviderModuleName -notin $InstalledProviderModules) {
        
        ## Attempt the Installation of the module
        $InstalledModule = Install-Module -Name $TMProviderModuleName -ErrorAction SilentlyContinue
        
        ## If the Module Installation was unsuccessful
        if (-Not $InstalledModule) {
            Write-Warning ('Required Module: ' + $TMProviderModuleName + ' is not installed, and installation failed.')
            return
        }
        else {
            Set-TMConsoleSetting -Name 'InstalledProviderModules' -Value ($InstalledProviderModules + $TMProviderModuleName)
        }
    }

    ## Import the module
    Import-Module $TMProviderModuleName -ErrorAction 'SilentlyContinue'
}