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. .PARAMETER user Username to be used for authentication with repository. .PARAMETER password Password to be used for authentication with repository. .EXAMPLE Install-Dependencies -Path ./configuration.psd1 -Repository 'sample' -Credential $credential #> function Install-Dependencies { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [String] $path, [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [String] $repository, [Parameter()] [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 } } } } <# .SYNOPSIS This function registers the PowerShell repository and sets to "Trusted". .PARAMETER uri URI of the repository. .PARAMETER name Specifies the friendly name of a repository to be registered. .PARAMETER credential PSCredential to be used for authentication with repository. .EXAMPLE Register-Repository -Uri 'sample' -Name 'sample' -Credential $credential #> function Register-Repository { [CmdletBinding()] param( [Parameter(Mandatory = $true)] [ValidateNotNullOrEmpty()] [String] $uri, [Parameter()] [String] $name = 'repository', [Parameter()] [PSCredential] $credential ) Write-Output "Registering powershell modules repository $name..." Get-PSRepository -WarningAction SilentlyContinue | Where-Object { $_.Name -eq $name} | Unregister-PSRepository $repo = @{ Name = $name SourceLocation = $uri PublishLocation = $uri PackageManagementProvider = 'Nuget' } if ($credential) { $repo['Credential'] = $credential } Register-PSRepository @repo Set-PSRepository -Name $name -InstallationPolicy 'Trusted' $user = $credential.GetNetworkCredential().UserName $password = $credential.GetNetworkCredential().Password # & nuget sources remove -name $name # & nuget sources add -name $name -Source $uri -UserName $user -Password $password } Export-ModuleMember -Function @('Install-Dependencies', 'Register-Repository') |