PSInstallDependencies.psm1

<#
    .SYNOPSIS
        This function install any dependencies from external repository based on .PSD1 file specified.

    .PARAMETER path
        Path for the .PSD1 file.

    .PARAMETER repository
        Specifies the friendly name of a repository that has been registered by running Register-PSRepository.

    .PARAMETER credential
        PSCredential to be used for authentication with repository.

    .EXAMPLE
        Invoke-InstallDependencies -Path ./configuration.psd1 -Repository 'sample' -Credential $credential
#>


function Invoke-InstallDependencies
{
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [String]
        $path,

        [Parameter(Mandatory = $true)]
        [String]
        $repository,

        [Parameter(Mandatory = $false)]
        [System.Management.Automation.PSCredential]
        $credential
    )

    $psDataFile = Import-PowershellDataFile -Path $path
    $requiredModules = $psDataFile['RequiredModules']

    if ($null -ne $requiredModules)
    {
        foreach ($module in $requiredModules)
        {
            $moduleName = $module['ModuleName']
            if (-not $moduleName)
            {
                $moduleName = $module
            }
            $moduleInfo = @{
                Name        = $moduleName
                Repository  = $repository
                ErrorAction = 'SilentlyContinue'
            }
            if ($credential)
            {
                $moduleInfo['Credential'] = $credential
            }
            if ($module['ModuleVersion'])
            {
                $moduleInfo['RequiredVersion'] = $module['ModuleVersion']
            }
            if (-not (Get-Module -Name $moduleName -ListAvailable))
            {
                Write-Output "Installing module $moduleName from repository $repository..."
                Install-Module @moduleInfo -SkipPublisherCheck -Force -Verbose
            }
        }
    }
}

Export-ModuleMember -Function 'Invoke-InstallDependencies'