Private/Import-MdtModule.ps1

Function Import-MdtModule {
    <#
        .SYNOPSIS
            Tests for and imports the MDT PowerShell module. Returns True or False depending on whether the module can be loaded.

        .NOTES
            Author: Aaron Parker
            Twitter: @stealthpuppy

        .PARAMETER Force
            Re-imports the MDT module and its members, even if the module or its members have an access mode of read-only.
    #>

    [CmdletBinding(SupportsShouldProcess = $True)]
    [OutputType([Boolean])]
    Param (
        [Parameter(Mandatory = $False)]
        [switch] $Force
    )

    # Get path to the MDT PowerShell module via the Registry and fail if we can't read the properties
    try {
        $mdtReg = Get-ItemProperty "HKLM:SOFTWARE\Microsoft\Deployment 4" -ErrorAction SilentlyContinue
    }
    catch {
        Write-Warning "Unable to read MDT Registry path properties."
        Write-Output $False
        Break
    }
    finally {
        If ($Null -ne $mdtReg.Install_Dir) {
            $mdtInstallDir = Get-ValidPath $mdtReg.Install_Dir
            Write-Verbose "MDT Workbench install directory is: $mdtInstallDir"
        }
        Else {
            Write-Warning "Failed to read MDT Workbench path from the Registry."
        }
    }

    # Attempt to load the module
    $mdtModule = "$mdtInstallDir\bin\MicrosoftDeploymentToolkit.psd1"
    If (Test-Path -Path $mdtModule) {
        try {
            If ($pscmdlet.ShouldProcess($mdtModule, "Importing module")) {
                If ($Force) {
                    Import-Module -Name $mdtModule -ErrorAction SilentlyContinue
                }
                Else {
                    Write-Verbose "Importing the MDT module with -Force."
                    Import-Module -Name $mdtModule -ErrorAction SilentlyContinue -Force
                }
            }
        }
        catch {
            Write-Warning "Could not load MDT PowerShell Module. Please make sure that the MDT console is installed correctly."
            Write-Output $False
            Break
        }
        finally {
            Write-Output $True
        }
    }
    Else {
        Write-Warning "Cannot find the MDT PowerShell module. Is the MDT console installed?"
        Write-Output $False
    }
}