Private/Test-Module.ps1

function Test-Module {
    <#
    .SYNOPSIS
        Tests if the given module exists on the local system.
 
    .DESCRIPTION
        Tests if the given module is installed on the local system. It returns a bool value as result.
 
    .PARAMETER Name
        Define a item name you need to test
 
    .PARAMETER Type
        Define the dependency type. This could be a Module or PSnapin.
 
    .PARAMETER MessagePattern
        You an optionally adjust the message pattern for the error message itself.
        The available placeholders are:
        - {0} : Type
        - {1} : Name
 
    .PARAMETER StopIfFails
        This switch forces the entire script to stop if the given dependency object fails.
 
    .INPUTS
        [None]
 
    .OUTPUTS
        [Bool]
 
    .EXAMPLE
        .\Test-Dependency -Name 'VMware.PowerCLI' -Type 'Module'
 
    .EXAMPLE
        .\Test-Dependency -Name 'VMware.PowerCLI' -Type 'Module' -StopIfFails
 
    .NOTES
        - File Name : Test-Module.ps1
        - Author : Marco Blessing - marco.blessing@googlemail.com
        - Requires :
 
    .LINK
        https://github.com/OCram85/PSCredentialStore
    #>

    [OutputType([bool])]
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string]$Name,

        [Parameter(Mandatory = $false)]
        [ValidateNotNullOrEmpty()]
        [string]$MessagePattern = @"
Could not find the required {0} called {1}. Please install the required {0} to run this function!
"@
,
        [Parameter(Mandatory = $false)]
        [switch]$StopIfFails
    )
    begin { }

    process {
        $Message = $MessagePattern -f $Type, $Name
        Write-Debug $Message

        if (Get-Module -Name $Name -ListAvailable) {
            return $true
        }
        else {
            if ($StopIfFails) {
                Write-Error -Message $Message -ErrorAction Stop -Category NotInstalled
            }
            return $false
        }
    }

    end { }
}