Public/Install-DSCResourceModule.ps1

function Install-DSCResourceModule {
<#
.SYNOPSIS
    Short description
.DESCRIPTION
    Long description
.EXAMPLE
    Example of how to use this cmdlet
.EXAMPLE
    Another example of how to use this cmdlet
#>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$true,ValueFromPipeline=$true)]
        [string[]]$Name,
        [Parameter(Mandatory=$false)]
        [string]$Version,
        [Parameter(Mandatory=$false)]
        [string]$Repository
    )
    
    begin {
       
       $installParams = @{
           'Name' = $Name
       }

       if ($PSBoundParameters.ContainsKey('Repository')) {
           $installParams.Add('Repository',$Repository)
       }

       if ($PSBoundParameters.ContainsKey('Version')) {
           $installParams.Add('RequiredVersion',$Version)
       }

    }
    
    process {
        
        foreach ($moduleName in $Name) {

            if ($PSBoundParameters.ContainsKey('Version'))
            {
                try 
                {
                    $module = Get-Module -Name $moduleName -ListAvailable

                    if ($module.Version -eq $Version) 
                    {
                        Write-Verbose -Message "Module [$Name] found Version matches [$Version]"
                    }
                    else 
                    {
                        Write-Warning -Message "Module [$Name] version does not match"
                        Write-Warning -Message "Expecting [$Version] was [$($module.Version)]"
                        Write-Verbose -Message "Removing [$Name] version [$($module.Version)"
                        #Run Remove-Module helper
                        Write-Verbose -Message "Installing [$Name] version [$Version]"
                        Install-Module @installParams
                    }
                }
                catch
                {
                    Write-Verbose -Message "Module [$Name] not found"
                    Install-Module @installParams
                }

            }
            else
            {
                if (!(Get-Module -Name $moduleName -ListAvailable)) 
                {
                    Write-Verbose -Message "Installing [$Name]"
                    Install-Module @installParams
                }
                else
                {
                    Write-Verbose -Message "Module [$Name] already exists"
                }
            }
        } #end foreach
        } #end Process
    
    end {
    }
}

#Install-DSCResourceModule -Name xnetworking -Version '3.2.0.0' -Verbose