Public/Install-PsmDependencies.ps1

function Install-PsmDependencies {
  <#
    .Synopsis
      A function that installs the current module's dependencies
    .DESCRIPTION
      A function that installs the current module's dependencies
    .EXAMPLE
      Install-PsmDependencies #installs all RequiredModules in psd1 file
      Install-PsmDependencies "BitLocker" #installs bitlocker and adds to RequiredModules
  #>

  [CmdletBinding(SupportsShouldProcess=$true)]
  param(
    [Parameter(
      Mandatory=$false, 
      ValueFromPipeline=$true,
      ValueFromPipelineByPropertyName=$true)]
    [string]$Name
  )
 
  BEGIN{
    Write-Verbose "Starting Install-PsmDependencies..."
    throw "This just isn't going to work... yet..."
    
    Confirm-IsInitializedModulePath
    $packageXml = Import-CliXml .\module-psd1.xml
  }#begin

  PROCESS{
    if ($psCmdlet.ShouldProcess(<# on target --> #>"$($packageXml.RootModule)", <# What if: Performing operation --> #>"Installing required module(s)")) {    
      
      $dependency = Get-Module -ListAvailable *$Name* | Select-Object -First 1

      if ($dependency -and ($dependency | Measure-Object).Count -gt 0) {
        
        Install-Module -Name $dependency.ModuleName -RequiredVersion $dependency.ModuleVersion -Force

        $packageXml.RequiredModules += $dependency
        
        $packageXml | Export-CliXml .\module-psd1.xml
        
        Write-Verbose "Added dependency $dependency to module-psd1.xml"

      } else {
        
        $packageXml.RequiredModules | Foreach-Object {
          Install-Module -Name $_.ModuleName -RequiredVersion $_.ModuleVersion -Force
          Write-Verbose "Installed $($_.ModuleName) @ Version: $($_.ModuleVersion)"
        }  
      
      }
    } 
  }#process

  END{
    Write-Verbose "Finished Install-PsmDependencies..."
  }#end
}